Explication détaillée de l'utilisation du module Requests de Python

巴扎黑
Libérer: 2017-08-16 13:20:56
original
1905 Les gens l'ont consulté

Le module Requests est un module utilisé pour l'accès au réseau. En fait, il existe de nombreux modules similaires, tels que urllib, urllib2, httplib, httplib2. Ils fournissent essentiellement des fonctions similaires, alors pourquoi le module Requests peut-il se démarquer ? Vous pouvez ouvrir son site officiel et y jeter un œil. Il s'agit d'un module http pour les « êtres humains ». Alors, à quel point est-ce humain ? Je pense que si vous avez déjà utilisé des modules tels que urllib, vous constaterez qu'il est effectivement très convivial.

1. Importer

Une fois le téléchargement terminé, l'importation du module est très simple. Le code est le suivant :

import requests
Copier après la connexion

2.

Nous répertorions ici la syntaxe la plus courante pour l'envoi de requêtes get ou post.

1. Envoyez une requête get sans paramètres :

r=requests.get("http://php.cn/justTest")
Copier après la connexion
Maintenant, nous obtenons un objet de réponse r, nous pouvons utiliser cet objet pour obtenir toutes les informations que nous voulons.

Dans l'exemple ci-dessus, la requête get n'a aucun paramètre. Que se passe-t-il si la requête nécessite des paramètres ?

2. Envoyez une demande d'obtention avec des paramètres

payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get("http://php.cn/justTest", params=payload)
Copier après la connexion
Comme nous le savons d'après ce qui précède, nos paramètres d'obtention sont transmis en tant que paramètres de mot-clé params.

Nous pouvons imprimer l'URL spécifique demandée pour voir si elle est correcte :

>>>print r.url
http://pythontab.com/justTest?key2=value2&key1=value1
Copier après la connexion
Vous pouvez voir que l'URL correcte a bien été consultée.

Vous pouvez également transmettre une liste à un paramètre de requête :

>>> payload = {'key1': 'value1', 'key2': ['value2', 'value3']}
>>> r = requests.get("http://php.cn/justTest", params=payload)
>>> print r.url
http://pythontab.com/justTest?key1=value1&key2=value2&key2=value3
Copier après la connexion
Ce qui précède est le formulaire de base de la requête get.

3. Envoyer une demande de publication

r = requests.post("http://php.cn/postTest", data = {"key":"value"})
Copier après la connexion
Comme vous pouvez le voir ci-dessus, les paramètres de demande de publication sont transmis en tant que paramètres de mots-clés de données.

Le paramètre de données actuel transmet un dictionnaire. Nous pouvons également transmettre des données au format json, comme suit :

>>> import json
>>> import requests
>>> payload = {"key":"value"}
>>> r = requests.post("http://php.cn/postTest", data = json.dumps(payload))
Copier après la connexion
Comme il est trop courant d'envoyer des données au format json, dans le module Requêtes. Dans la version supérieure, le paramètre de mot-clé json a été ajouté. Vous pouvez envoyer directement des données json à la requête de publication sans utiliser le module json. Voir ci-dessous :

>>> payload = {"key":"value"}
>>> r = requests.post("http://php.cn/postTest", json=payload)
Copier après la connexion
Et si nous voulons publier un fichier ? ? A ce moment, vous devez utiliser le paramètre files :

>>> url = 'http://php.cn/postTest'
>>> files = {'file': open('report.xls', 'rb')}
>>> r = requests.post(url, files=files)
>>> r.text
Copier après la connexion
Nous pouvons également préciser des informations supplémentaires telles que le nom du fichier lors de la publication du fichier :

>>> 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)
Copier après la connexion
conseils : Il est Il est fortement recommandé d'utiliser le mode binaire. Ouvrez le fichier, car si vous l'ouvrez au format texte, une erreur peut survenir à cause de l'en-tête "Content-Length".

Comme vous pouvez le constater, il est facile d'envoyer des requêtes en utilisant Requêtes !

3. Obtenir les informations de retour

Voyons comment obtenir les informations de retour après l'envoi de la demande. Continuons à utiliser l'exemple du haut :

>>> import requests
>>> r=requests.get('http://php.cn/justTest')
>>> r.text
Copier après la connexion
Dans quel format d'encodage la sortie r.text est-elle ?


>>> r.encoding
'utf-8'
Copier après la connexion
a été initialement sorti au format utf-8. Que faire si je souhaite modifier le format de sortie de r.text ?

>>> r.encoding = 'ISO-8859-1'
Copier après la connexion
Cela change le format de sortie en "ISO-8859-1".

Il existe également une instruction de sortie appelée r.content, alors quelle est la différence entre celle-ci et r.text ? r.content renvoie un flux d'octets, qui peut être utilisé si nous demandons une adresse d'image et souhaitons enregistrer l'image. Voici un extrait de code comme suit :

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
Copier après la connexion
Le r.text qui vient d'être introduit est renvoyé. une chaîne, donc si la réponse correspondant à la requête est un json, puis-je récupérer directement les données au format json ? r.json() est préparé pour cela.

Nous pouvons également récupérer les données originales renvoyées par le serveur, il suffit d'utiliser r.raw.read(). Cependant, si vous souhaitez vraiment obtenir les données de retour d'origine, n'oubliez pas d'ajouter l'option "stream=True" lors de la demande, par exemple :

r = requests.get('https://api.github.com/events', stream=True)。
Copier après la connexion
Nous pouvons également obtenir le code d'état de la réponse :

>>> r = requests.get('http://php.cn/justTest')
>>> r.status_code
200
Copier après la connexion
Vous pouvez également utiliser request.codes.ok pour faire référence à la valeur de retour de 200 :

>>> r.status_code == requests.codes.ok
True
Copier après la connexion
4 Concernant les en-têtes

Nous pouvons imprimer l'en-tête de réponse. :

>>> r= requests.get("http://php.cn/justTest")
>>> r.headers
Copier après la connexion
`r.headers` renvoie un dictionnaire, par exemple :

{
    'content-encoding': 'gzip',
    'transfer-encoding': 'chunked',
    'connection': 'close',
    'server': 'nginx/1.0.4',
    'x-runtime': '147ms',
    'etag': '"e1ca502697e5c9317743dc078f67693a"',
    'content-type': 'application/json'
}
Copier après la connexion
Nous pouvons utiliser la méthode suivante pour obtenir des en-têtes de réponse pour jugement :

r.headers['Content-Type']
Copier après la connexion
Ou

r.headers.get('Content-Type')
Copier après la connexion
Et si nous voulons obtenir l'en-tête de la requête (c'est-à-dire les informations d'en-tête que nous envoyons au serveur) ? Peut être obtenu directement en utilisant r.request.headers.

En même temps, nous pouvons également ajouter des en-têtes personnalisés (transmis via les paramètres de mots-clés des en-têtes) lors de la demande de données :

>>> headers = {'user-agent': 'myagent'}
>>> r= requests.get("http://php.cn/justTest",headers=headers)
Copier après la connexion
5 À propos des cookies

Si si un. La réponse contient des cookies, nous pouvons utiliser la méthode suivante pour les obtenir :

>>> url = 'http://www.php.cn'
>>> r = requests.get(url)
>>> r.cookies['example_cookie_name']
'example_cookie_value'
Copier après la connexion
Nous pouvons également envoyer nos propres cookies (en utilisant le paramètre de mot-clé cookies) :

>>> url = 'http://php.cn/cookies'
>>> cookies={'cookies_are':'working'}
>>> r = requests.get(url, cookies=cookies)
Copier après la connexion
6. À propos redirection

Parfois, lorsque nous demandons une URL, le serveur redirigera automatiquement notre requête. Par exemple, github redirigera notre requête http vers la requête https. Nous pouvons utiliser r.history pour afficher les redirections :

>>> r = requests.get('http://php.cn/')
>>> r.url
'http://php.cn/'
>>> r.history
[]
Copier après la connexion
Comme vous pouvez le voir dans l'exemple ci-dessus, nous utilisons le protocole http pour accéder, mais dans r.url, le protocole https est imprimé. Alors, que dois-je faire si j'insiste pour que le serveur utilise le protocole http, ce qui signifie qu'il est interdit au serveur de rediriger automatiquement ? Utilisez le paramètre allow_redirects :

r = requests.get('http://php.cn', allow_redirects=False)
Copier après la connexion
7. À propos du temps de requête

Nous pouvons utiliser le paramètre timeout pour définir le délai d'expiration de la requête de l'URL (l'unité de temps est en secondes) :

requests.get('http://php.cn', timeout=1)
Copier après la connexion
8. À propos du proxy

Nous pouvons également spécifier un proxy dans le programme pour l'accès http ou https (en utilisant les paramètres de mots-clés proxy), comme suit :

proxies = {
  "http": "http://10.10.1.10:3128",
  "https": "http://10.10.1.10:1080",
}
requests.get("http://php.cn", proxies=proxies)
Copier après la connexion

九、关于session

我们有时候会有这样的情况,我们需要登录某个网站,然后才能请求相关url,这时就可以用到session了,我们可以先使用网站的登录api进行登录,然后得到session,最后就可以用这个session来请求其他url了:

s=requests.Session()
login_data={'form_email':'youremail@example.com','form_password':'yourpassword'}
s.post("http://pythontab.com/testLogin",login_data)
r = s.get('http://pythontab.com/notification/')
print r.text
Copier après la connexion

其中,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()
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!