Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der Verwendung des Requests-Moduls von Python

Detaillierte Erläuterung der Verwendung des Requests-Moduls von Python

巴扎黑
巴扎黑Original
2017-09-19 11:12:451286Durchsuche

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.

1. Importieren

Nach Abschluss des Downloads ist der Import des Moduls wie folgt:

import requests

2. URL anfordern

Hier listen wir die gebräuchlichste Syntax zum Senden von Get- oder Post-Anfragen auf.

1. Senden Sie eine Get-Anfrage ohne Parameter:

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=value1
Sie 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=value3
Das 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.text
Wir 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.text
In 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.close
Der 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
200
Sie können request.codes.ok auch verwenden, um auf den Rückgabewert von 200 zu verweisen:

>>> r.status_code == requests.codes.ok
True
4. Bezüglich Header

Wir 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 Cookies

Wenn 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 Umleitung

Manchmal, 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 Proxy

Wir 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)

九、关于session

我们有时候会有这样的情况,我们需要登录某个网站,然后才能请求相关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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn