3, les demandes réseau Requests-
Les demandes sont le langage écrit en Python à base urllib
démonstration fonctionnelle globale
import requests
response = requests.get("https://www.baidu.com")
print(type(response)) <class 'requests.models.Response'>
print(response.status_code)
print(type(response.text))
print(response.text) 字符串
print(response.cookies)
print(response.content) 二进制
print(response.content.decode("utf-8")) 字符串
Note: Le
site Web directement response.text brouillées en cas de problème, l' utilisation response.content format de données renvoyées est un format binaire, puis decode () converti en utf-8, résolus par response.text directement de problème de dos tronqués.
Une fois la demande faite, les demandes fera une supposition basée sur l'en-tête de réponse HTTP encodée. Lorsque vous visitez le response.text, demandes utilisera son encodage de texte présumé. Vous pouvez savoir quel encodage Les demandes d'utilisation, et peut utiliser la propriété response.encoding pour le changer.
response =requests.get("http://www.baidu.com")
response.encoding="utf-8"
print(response.text)
Que ce soit par response.content.decode ( « utf-8) ou par response.encoding = » utf-8 « problèmes tronqués de mode peut être évité
le codage de détection automatique
pip install chardet
response =requests.get("http://www.baidu.com")
response.encoding=chardet.detect(response.content)['encoding'] 直接获取全部响应
print(response.text)
另外一种流模式
response =requests.get("http://www.baidu.com", stream=True)
response.raw.read(10
méthode de requête
import requests
requests.post("http://httpbin.org/post")
requests.put("http://httpbin.org/put")
requests.delete("http://httpbin.org/delete")
requests.head("http://httpbin.org/get")
requests.options("http://httpbin.org/get")
1. Procédé demande
demande GET avec des paramètres
import requests
response = requests.get("http://httpbin.org/get?name=zhaofan&age=23")
print(response.text)
2, dans la chaîne de requête d'URL pour transmettre des données
nous serait généralement passer par voie httpbin.org/get?key=val. Les demandes module permet les params mot - clé passer des paramètres à transmettre ces paramètres à un dictionnaire
import requests
data = {
"name":"zhaofan",
"age":22
}
response = requests.get("http://httpbin.org/get",params=data)
print(response.url)
print(response.text)
Parse Json
import requests
import json
response = requests.get("http://httpbin.org/get")
print(type(response.text))
print(response.json())
print(json.loads(response.text))
print(type(response.json()))
tête Ajouter
import requests
headers = {
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
}
response =requests.get("https://www.zhihu.com",headers=headers)
print(response.text)
demande POST de base
import requests
data = {
"name":"zhaofan",
"age":23
}
response = requests.post("http://httpbin.org/post",data=data)
print(response.text)
réponse
import requests
response = requests.get("http://www.baidu.com")
print(type(response.status_code),response.status_code)
print(type(response.headers),response.headers) response.headers.get('content-type')
print(type(response.cookies),response.cookies)
print(type(response.url),response.url)
print(type(response.history),response.history)
Code du Statut
100: ( 'continuer',),
101 ( 'switching_protocols',),
102: ( 'traitement',),
103 ( 'checkpoint'),
122 ( 'uri_too_long', 'request_uri_too_long'),
200: ( 'ok', 'ok', 'all_ok', 'all_okay', 'all_good', '\ o /', '✓'),
201: ( 'créé',),
202: ( 'accepté',),
203: ( 'non_authoritative_info', 'non_authoritative_information'),
204 ( 'no_content',),
205 ( 'reset_content', 'reset'),
206 ( 'partial_content', 'partielle'),
207 ( 'multi_status ' 'multiple_status', '', 'multi_stati multiple_stati'),
208 ('already_reported »,),
226 ( 'im_used',),
Redirection.
300: ( 'multiple_choices',),
301: ( 'moved_permanently', 'déplacé', '\ o-'),
302 ( 'trouvé',),
303: ( 'see_other', 'autre'),
304: ( 'not_modified',),
305 ( 'use_proxy',),
306 ( 'switch_proxy',),
307 ( 'temporary_redirect', 'temporary_moved', 'temporaire'),
308 ( 'permanent_redirect',
« resume_incomplete », 'CV',), # Ces 2 à supprimer dans la version 3.0
Erreur client.
400: ( 'bad_request', 'mauvais'),
401: ( 'non autorisés',),
402: ( 'payment_required', 'paiement'),
403: ( 'interdit',),
404: ( 'not_found', ' -o- '),
405 (' method_not_allowed », 'not_allowed'),
406 ( 'not_acceptable',),
407 ( 'proxy_authentication_required', 'proxy_auth', 'proxy_authentication'),
408 ( 'request_timeout', temporisation),
409 ( 'conflit',),
410 ( 'gone',),
411 ( 'length_required',),
412 ( 'precondition_failed', 'condition'),
413 ( 'request_entity_too_large' ,),
414 ( »
416: ( 'requested_range_not_satisfiable', 'requested_range', 'range_not_satisfiable'),
417: ( 'expectation_failed',),
418: ( 'im_a_teapot', 'théière', 'i_am_a_teapot'),
421: ( 'misdirected_request',),
422: ( 'unprocessable_entity', 'non traitable'),
423 ( 'verrouillé',),
424 ( 'failed_dependency', 'dépendance'),
425 ( 'unordered_collection', 'non ordonnée),
426 (' upgrade_required », 'mise à jour'),
428 ( 'precondition_required', 'condition'),
429 ( 'too_many_requests', 'too_many'),
431 ( 'header_fields_too_large', 'fields_too_large'),
444:( 'no_response', 'none'),
449 ( 'retry_with', 'nouvelle tentative'),
450 ( 'blocked_by_windows_parental_controls', 'parental_controls'),
451: ( 'unavailable_for_legal_reasons', 'legal_reasons'),
499 ( 'client_closed_request',),
Erreur du serveur.
500: ( 'internal_server_error', 'server_error', '/ o', '✗'),
501 ( 'not_implemented',),
502 ( 'bad_gateway',),
503 ( 'SERVICE_UNAVAILABLE', 'indisponible') ,
504 ( 'gateway_timeout',),
505 ( 'http_version_not_supported', 'http_version'),
506 ( 'variant_also_negotiates',),
507 ( 'insufficient_storage',),
509 ( 'bandwidth_limit_exceeded', 'bande passante' ),
510 ( 'not_extended',),
511 ( 'network_authentication_required', 'network_auth', 'network_authentication')
Exemples
import requests
response= requests.get("http://www.baidu.com")
if response.status_code == requests.codes.ok:
print("访问成功")
Obtenez les cookies
import requests
response = requests.get("http://www.baidu.com")
print(response.cookies)
for key,value in response.cookies.items():
print(key+"="+value)
##
for cookie in response.cookie.keys()
print(response.cookies.get(cookie))
##自定义cookie
cookies = dict(name='qiye', age='10')
response = requests.get("http://www.baidu.com",cookies=cookies)
Les restes de session
import requests
s = requests.Session()
s.get("http://httpbin.org/cookies/set/number/123456")
response = s.get("http://httpbin.org/cookies")
print(response.text)
datas={'name':'hhh', 'password':'xxxx'}
r=s.post(url,data=datas)
certificat de validation
import requests
from requests.packages import urllib3
urllib3.disable_warnings()
response = requests.get("https://www.12306.cn",verify=False)
print(response.status_code)
Paramètres du proxy
import requests
proxies= {
"http":"http://127.0.0.1:9999",
"https":"http://127.0.0.1:8888"
}
response = requests.get("https://www.baidu.com",proxies=proxies)
print(response.text)
#### 或通过环境变量配置
HTTP_PROXY HTTPS_PROXY
##设置账号和密码
proxies = {
"http":"http://user:[email protected]:9999"
}
## 通过sokces
## pip install "requests[socks]"
proxies= {
"http":"socks5://127.0.0.1:9999",
"https":"sockes5://127.0.0.1:8888"
}
Paramètres du délai
Vous pouvez être fourni par un délai d'attente de paramètre de délai d'attente
r= request.get(url,timeout=2)
Authentifier
Les sites qui nécessitent une authentification peuvent être atteints par le module requests.auth
import requests
from requests.auth import HTTPBasicAuth
response = requests.get("http://120.27.34.24:9001/",auth=HTTPBasicAuth("user","123"))
print(response.status_code)
##另一种方式
import requests
response = requests.get("http://120.27.34.24:9001/",auth=("user","123"))
print(response.status_code)
Gestion des exceptions
Anormaux reqeusts sur ici vous pouvez voir les détails:
http://www.python-requests.org/en/master/api/#exceptions toutes les exceptions sont dans les requests.excepitons
On peut voir de la source RequestException Hériter IOError,
HTTPError, ConnectionError, délai d' attente héritage RequestionException
ProxyError, SSLError héritage ConnectionError
ReadTimeout hérité délai d' attente anormale
Attrapez l'ordre d'exception
import requests
from requests.exceptions import ReadTimeout,ConnectionError,RequestException
try:
response = requests.get("http://httpbin.org/get",timout=0.1)
print(response.status_code)
except ReadTimeout:
print("timeout")
except ConnectionError:
print("connection Error")
except RequestException:
print("error")
délai d'attente est d'abord capturé anomalie, lorsque le réseau sera brisé ConnectionError capture courrier, si les exceptions ne sont pas pris plus tôt, le dernier peut être capturé aussi par RequestExctption