官方文档:http://docs.python-requests.org/en/master
安装方法
命令行下输入:pip3 install requests。详见:https://www.cnblogs.com/cthon/p/9388304.html
一、什么是Requets?
requets
实例引入
import requests response = requests.get(\'https://www.baidu.com\') print(type(response)) print(response.status_code) print(type(response.text)) print(response.text) print(response.cookies)
各种请求方式
import requests requests.post(\'http://httpbin.org/post\') requests.put(\'http://httpbin.org/put\') requests.delete(\'http://httpbin.org/delete\') requests.get(\'http://httpbin.org/get\') requests.options(\'http://httpbin.org/get\')
请求
基本GET请求
基本写法
import requests response = requests.get(\'http://httpbin.org/get\') print(response.text)
带参数GET请求
import requests response = requests.get(\'http://httpbin.org/get?name=jack&age=22\') print(response.text)
import requests
data = {
\'name\':\'jack\',
\'age\':22
}
response = requests.get(\'http://httpbin.org/get\',params=data)
print(response.text)
解析json
import requests import json response = requests.get(\'https://github.com/get\') print(type(response.text)) print(response.json()) print(json.loads(response.text)) print(type(response.json()))
获取二进制数据
import requests response = requests.get(\'https://github.com/favicon.ico\') print(type(response.text),type(response.content)) print(response.text) print(response.content)
import requests
response = requests.get(\'https://www.bilibili.com/video/av24028845/?p=9\')
with open(\'q.avi\',\'wb\') as f:
f.write(response.content)
f.close()
添加headers
import requests response = requests.get(\'https://zhihu.com/explore\') print(response.text)
import requests
headers = {\'User-Agent\':\'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36\'}
response = requests.get(\'https://www.zhihu.com/explore\',headers=headers)
print(response.text)
基本POST请求
import requests
data = {\'name\':\'jack\',\'age\':\'22\'}
response = requests.post(\'https://httpbin.org/post\',data=data)
print(response.text)
print(response.json())
import requests
data = {\'name\':\'jack\',\'age\':\'22\'}
headers = {\'User-Agent\':\'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36\'}
response = requests.post(\'https://httpbin.org/post\',data=data,headers=headers)
print(response.text)
print(response.json())
响应
response属性
import requests response = requests.get(\'http://www.jianshu.com\') print(type(response.status_code),response.status_code) print(type(response.headers),response.headers) print(type(response.cookies),response.cookies) print(type(response.url),response.url) print(type(response.history),response.history)
状态码判断
import requests response = requests.get(\'http://www.cnblogs.com/cthon/p/9383778.html\') exit() if not response.status_code == requests.codes.not_found else print(\'404 Not Found\')
import requests response = requests.get(\'http://www.cnblogs.com/cthon/p/9383778.html\') exit() if not response.status_code == 200 else print(\'Request Successfully\')
状态码
100:(\'continue\',),
101:(\'switching_protocols\',),
102:(\'processing\',),
103:(\'checkpoint\',),
122:(\'url_too_long\',\'request_url_too_long\'),
200:(\'ok\',\'okay\',\'all_ok\',\'all_okay\',\'all_good\',\'\\o/\',\'√\',),
201:(\'created\',),
202:(\'accepted\',),
203:(\'non_authoritative_info\',\'non_authoritative_information\'),
204:(\'no_content\',),
205:(\'reset_content\',\'reset\',),
206:(\'partial_content\',\'partial\'),
207:(\'multi_status\',\'multiple_status\',\'multi_stati\',\'multiple_status\'),
208:(\'already_reported\',),
226:(\'im_used\',),
#Redirection
300:(\'multiple_choices\',),
301:(\'moved_permanently\',\'moved\',\'\\o-\'),
302:(\'found\',),
303:(\'see_other\',\'other\'),
304:(\'not_modified\',),
305:(\'use_proxy\',),
306:(\'switch_proxy\',),
307:(\'temporary_redirect\',\'temporary_moved\',\'temporary\'),
308:(\'permanent_redirect\',\'temporary_moved\',\'temporary\',),#There 2 to be removed in 3.0
#Client Error
400:(\'bad_request\',\'bad\'),
401:(\'unauthorized\',),
402:(\'payment_required\',\'payment\'),
403:(\'forbidden\',),
404:(\'not_found\',\'-o-\'),
405:(\'method_not_allowed\',\'not_allowed\'),
406:(\'not_acceptable\',),
407:(\'proxy_authentication_required\',\'proxy_auth\',\'proxy_authentication\'),
408:(\'request_timeout\',\'timeout\'),
409:(\'confict\',),
410(\'gone\',),
411:(\'length_required\',),
412:(\'precondition_failed\',\'precondition\'),
413:(\'request_entity_too_large\',),
414:(\'request_url_too_large\',),
415:(\'unsupported_media_type\',\'unsupported_media\',\'media_type\'),
416:(\'requested_range_not_satisfiable\',\'requestd_range\',\'range_not_satisfiable\'),
417:(\'expectation_request\',),
418:(\'im_a_teapot\',\'teapot\',\'i_am_a_teapot\'),
421:(\'misdirected_request\',),
422:(\'unprocessable_entity\',\'unprocessable\'),
423:(\'locked\',),
424:(\'failed_dependency\',\'dependency\'),
425:(\'unordered_collection\',\'unordered\'),
426:(\'upgrade_required\',\'upgrade\'),
428:(\'precondition_required\',\'precondition\'),
429:(\'too_many_requests\',\'too_many\'),
431:(\'header_fields_too_large\',\'fields_too_large\'),
444:(\'no_response\',\'none\'),
449:(\'retry_with\',\'retry\'),
450:(\'blocked_by_windows_parental_controls\',\'parental_controls\'),
451:(\'unavailable_for_legal_reasons\',\'legal_reasons\'),
499:(\'client_closed_request\',),
#Server Error
500:(\'internal_server_error\',\'server_error\',\'/o\\\',\'×\'),
501:(\'not_implemented\',),
502:(\'bad_gateway\',),
503:(\'service_unavailable\',\'unavailable\'),
504:(\'gateway_timeout\',),
505:(\'http_version_not_supported\',\'http_version\'),
506:(\'variant_also_negotiaes\',),
507:(\'insufficient_storage\',),
509:(\'bandwidth_limit_exceeded\',\'bandwidth\'),
510:(\'not_extended\',),
511:(\'network_aurhentication_required\',\'network_auth\',\'network_authentication\'),
高级文件操作
import requests
files= {\'file\':open(\'favicon.ico\',\'rb\')}
response = requests.post(\'http://httpbin.org/post\',files=files)
print(response.text)
获取Cookie
import requests
response = requests.get(\'http://www.baidu.com\')
print(response.cookies)
for key,value in response.cookies.items():
print(key+\'=\'+value)
会话维持
import requests requests.get(\'http://httpbin.org/cookies/set/number/123456789\') response=requests.get(\'http://httpbin.org/cookies\') print(response.text)
import requests s = requests.Session() s.get(\'http://httpbin.org/cookies/set/number/123456789\') response=s.get(\'http://httpbin.org/cookies\') print(response.text)
证书验证
#12306错误证书,请求失败 import requests response = requests.get(\'https://www.12306.cn/\') print(response.status_code)
import requests from requests.packages import urllib3 urllib3.disable_warnings() response = requests.get(\'https://www.12306.cn\',verify = False) print(response.status_code)
import requests reeponse = requests.get(\'https://www.12306.cn\',cer=(\'/path/server.crt\',\'/path/key\')) print(response.status_code)
代理设置
http代理
import requests
proxies = {
\'http\':\'http://127.0.0.1:9743\',
\'https\':\'https://127.0.0.1:9743\'
}
response = requests.get(\'https://www.taobao.com\',proxies=proxies)
print(response.status_code)
import requests
proxies = {
\'http\':\'http:/user:password@/127.0.0.1:9743\'
}
response = requests.get(\'https://www.taobao.com\',proxies=proxies)
print(response.status_code)
socket代理
pip3 install \'requests[socks]\'
import requests
proxies = {
\'http\':\'socks5://127.0..0.1.9742\',
\'https\':\'socks5://127.0.0.1:9742\'
}
response = requests.get(\'https://www.taobao.com\',proxies=proxies)
print(response.status_code)
超时设置
import requests
from requests.exceptions import ReadTimeout
try:
response = requests.get(\'http://www.baidu.com\',timeout = 0.01)
print(response.status_code)
except ReadTimeout:
print(\'Timeout\')
认证设置
import requests from requests.auth import HTTPBasicAuth r = requests.get(\'http://120.27.34.24:9001\',auth=HTTPBasicAuth(\'user\',\'123\')) print(r.status_code)
import requests r = requests.get(\'http://120.27.34.24:9001\',auth=(\'user\',\'123\')) print(r.status_code)
异常处理
import requests
from requests.exceptions import ReadTimeout,HTTPError,RequestException
try:
response = requests.get(\'http://www.baidu.com\',timeout=0.1)
print(response.status_code)
except ReadTimeout:
print(\'Timeout\')
except HTTPError:
print(\'Http error\')
except ConnectionError:
print(\'Connection Error\')
except RequestException:
print(\'Error\')