Heim > Artikel > Backend-Entwicklung > Detaillierte Erläuterung der Verwendung des Requests-Moduls von Python
Das Requests-Modul ist ein Modul, das für den Netzwerkzugriff verwendet wird. Tatsächlich gibt es viele ähnliche Module, wie z. B. urllib, urllib2, httplib, httplib2. Sie bieten grundsätzlich ähnliche Funktionen. Warum kann das Requests-Modul hervorstechen? Sie können die offizielle Website öffnen und einen Blick darauf werfen. Es handelt sich um ein http-Modul für „Menschen“. Wie menschlich ist es also? Ich glaube, wenn Sie schon einmal Module wie urllib verwendet haben, werden Sie feststellen, dass es tatsächlich sehr benutzerfreundlich ist.
Nach Abschluss des Downloads ist der Import des Moduls wie folgt:
import requests
r=requests.get("http://php.cn/justTest")Jetzt erhalten wir ein Antwortobjekt r, wir können dieses Objekt verwenden, um alle gewünschten Informationen abzurufen. Im obigen Beispiel hat die Get-Anfrage keine Parameter. Was ist, wenn die Anfrage Parameter erfordert? 2. Senden Sie eine Get-Anfrage mit Parametern
payload = {'key1': 'value1', 'key2': 'value2'} r = requests.get("http://php.cn/justTest", params=payload)Wie wir aus dem oben Gesagten wissen, werden unsere Get-Parameter als params-Schlüsselwortparameter übergeben. Wir können die angeforderte spezifische URL ausdrucken, um zu sehen, ob sie korrekt ist:
>>>print r.url http://php.cn/justTest?key2=value2&key1=value1Sie können sehen, dass tatsächlich auf die richtige URL zugegriffen wurde. Sie können auch eine Liste an einen Anforderungsparameter übergeben:
>>> payload = {'key1': 'value1', 'key2': ['value2', 'value3']} >>> r = requests.get("http://php.cn/justTest", params=payload) >>> print r.url http://php.cn/justTest?key1=value1&key2=value2&key2=value3Das Obige ist die Grundform der Get-Anfrage. 3. Senden Sie eine Post-Anfrage
r = requests.post("http://php.cn/postTest", data = {"key":"value"})Wie Sie oben sehen können, werden die Post-Anfrageparameter als Datenschlüsselwortparameter übergeben. Der aktuelle Datenparameter übergibt ein Wörterbuch. Wir können auch Daten im JSON-Format wie folgt übergeben:
>>> import json >>> import requests >>> payload = {"key":"value"} >>> r = requests.post("http://php.cn/postTest", data = json.dumps(payload))Da es zu üblich ist, Daten im JSON-Format im Modul „Anfragen“ zu senden In der höheren Version wurde der Schlüsselwortparameter json hinzugefügt. Sie können JSON-Daten direkt an die Post-Anfrage senden, ohne das JSON-Modul zu verwenden:
>>> payload = {"key":"value"} >>> r = requests.post("http://php.cn/postTest", json=payload)Was ist, wenn wir eine Datei veröffentlichen möchten? ? Zu diesem Zeitpunkt müssen Sie den Dateiparameter verwenden:
>>> url = 'http://php.cn/postTest' >>> files = {'file': open('report.xls', 'rb')} >>> r = requests.post(url, files=files) >>> r.textWir können beim Posten der Datei auch zusätzliche Informationen wie den Dateinamen angeben:
>>> url = 'http://php.cn/postTest' >>> files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})} >>> r = requests.post(url, files=files)Tipps: Das ist es Es wird dringend empfohlen, den Binärmodus zu verwenden. Öffnen Sie die Datei, denn wenn Sie sie im Textdateiformat öffnen, kann aufgrund des Headers „Content-Length“ ein Fehler auftreten. Wie Sie sehen, ist das Senden von Anfragen mit Requests einfach! 3. Erhalten Sie die Rücksendeinformationen Schauen wir uns an, wie Sie die Rücksendeinformationen nach dem Absenden der Anfrage erhalten. Verwenden wir weiterhin das obere Beispiel:
>>> import requests >>> r=requests.get('http://php.cn/justTest') >>> r.textIn welchem Kodierungsformat wird r.text ausgegeben?
>>> r.encoding 'utf-8'wurde ursprünglich im UTF-8-Format ausgegeben. Was ist, wenn ich das Ausgabeformat von r.text ändern möchte?
>>> r.encoding = 'ISO-8859-1'Dadurch wird das Ausgabeformat auf „ISO-8859-1“ geändert. Es gibt auch eine Ausgabeanweisung namens r.content. Was ist also der Unterschied zwischen dieser und r.text? r.content gibt einen Byte-Stream zurück, der verwendet werden kann, wenn wir eine Bildadresse anfordern und das Bild speichern möchten. Hier ist ein Codeausschnitt wie folgt:
def saveImage( imgUrl,imgName ="default.jpg" ): r = requests.get(imgUrl, stream=True) image = r.content destDir="D:\" print("保存图片"+destDir+imgName+"\n") try: with open(destDir+imgName ,"wb") as jpg: jpg.write(image) return except IOError: print("IO Error") return finally: jpg.closeDer gerade eingeführte r.text gibt Folgendes zurück: eine Zeichenfolge. Wenn die der Anfrage entsprechende Antwort ein JSON ist, kann ich die Daten dann direkt im JSON-Format abrufen? r.json() ist dafür vorbereitet. Wir können auch die vom Server zurückgegebenen Originaldaten erhalten, indem wir einfach r.raw.read() verwenden. Wenn Sie jedoch wirklich die ursprünglichen Rückgabedaten erhalten möchten, denken Sie daran, bei der Anfrage die Option „stream=True“ hinzuzufügen, z. B.:
r = requests.get('https://api.github.com/events', stream=True)。Wir können auch den Antwortstatuscode abrufen:
>>> r = requests.get('http://php.cn/justTest') >>> r.status_code 200Sie können request.codes.ok auch verwenden, um auf den Rückgabewert von 200 zu verweisen:
>>> r.status_code == requests.codes.ok True4. Bezüglich HeaderWir können den Antwortheader ausdrucken :
>>> r= requests.get("http://php.cn/justTest") >>> r.headers`r.headers` gibt ein Wörterbuch zurück, zum Beispiel:
{ 'content-encoding': 'gzip', 'transfer-encoding': 'chunked', 'connection': 'close', 'server': 'nginx/1.0.4', 'x-runtime': '147ms', 'etag': '"e1ca502697e5c9317743dc078f67693a"', 'content-type': 'application/json' }Wir können die folgende Methode verwenden, um einige Antwortheader zur Beurteilung zu erhalten:
r.headers['Content-Type']Oder
r.headers.get('Content-Type')Was ist, wenn wir den Anforderungsheader (d. h. die Header-Informationen, die wir an den Server senden) erhalten möchten? Kann direkt über r.request.headers abgerufen werden. Gleichzeitig können wir beim Anfordern von Daten auch benutzerdefinierte Header (durch Header-Schlüsselwortparameter übergeben) hinzufügen:
>>> headers = {'user-agent': 'myagent'} >>> r= requests.get("http://php.cn/justTest",headers=headers)5 Über CookiesWenn a Antwort Cookies enthält, können wir die folgende Methode verwenden, um sie abzurufen:
>>> url = 'http://www.php.cn' >>> r = requests.get(url) >>> r.cookies['example_cookie_name'] 'example_cookie_value'Wir können auch unsere eigenen Cookies senden (unter Verwendung des Schlüsselwortparameters Cookies):
>>> url = 'http://php.cn/cookies' >>> cookies={'cookies_are':'working'} >>> r = requests.get(url, cookies=cookies)6. Über UmleitungManchmal, wenn wir eine URL anfordern, leitet der Server unsere Anfrage automatisch um. Beispielsweise leitet Github unsere http-Anfrage auf eine https-Anfrage um. Wir können r.history verwenden, um Weiterleitungen anzuzeigen:
>>> r = requests.get('http://php.cn/') >>> r.url 'http://pythontab.com/' >>> r.history []Wie Sie im obigen Beispiel sehen können, verwenden wir das http-Protokoll für den Zugriff, aber in r.url wird das https-Protokoll gedruckt. Was soll ich also tun, wenn ich darauf bestehe, dass der Server das http-Protokoll verwendet, was bedeutet, dass dem Server die automatische Umleitung untersagt ist? Verwenden Sie den Parameter „allow_redirects“:
r = requests.get('http://php.cn', allow_redirects=False)7. Über die Anfragezeit Wir können den Timeout-Parameter verwenden, um das Anfrage-Timeout der URL festzulegen (Zeiteinheit ist Sekunden):
requests.get('http://php.cn', timeout=1)8. Informationen zum ProxyWir können im Programm auch einen Proxy für den http- oder https-Zugriff angeben (mithilfe der Schlüsselwortparameter „proxies“), wie folgt:
proxies = { "http": "http://10.10.1.10:3128", "https": "http://10.10.1.10:1080", } requests.get("http://php.cn", proxies=proxies)
我们有时候会有这样的情况,我们需要登录某个网站,然后才能请求相关url,这时就可以用到session了,我们可以先使用网站的登录api进行登录,然后得到session,最后就可以用这个session来请求其他url了:
s=requests.Session() login_data={'form_email':'youremail@example.com','form_password':'yourpassword'} s.post("http://php.cn/testLogin",login_data) r = s.get('http://php.cn/notification/') print r.text
其中,form_email和form_password是豆瓣登录框的相应元素的name值。
使用Requests模块也可以下载网页,代码如下:
r=requests.get("http://www.php.cn") with open("haha.html","wb") as html: html.write(r.content) html.close()
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Verwendung des Requests-Moduls von Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!