官方文档: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')