一、介绍
Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库。
安装:python -m pip install requests
二、设置请求
1、请求方式
import requests
r = requests.get("url")
r = requests.post('url', data = {'key':'value'})
r = requests.put('url', data = {'key':'value'})
r = requests.delete('url')
r = requests.head('url')
r = requests.options('url')
2、会话请求
1)session请求
s = requests.Session()
r = s.get('url')
with requests.Session() as s:
s.get('url')
2)设置session请求,可以永久使用
s = requests.Session()
s.auth = ('user', 'pass')
s.headers.update({'x-test': 'true'})
添加字典到对应cookies
requests.utils.add_dict_to_cookiejar(s.cookies, {'key': 'value'})
获取cookies的字典数据
requests.utils.dict_from_cookiejar(s.cookies)
3、准备请求
from requests import Request, Session
s = Session()
req = Request('GET', url, data=data, headers=headers)
prepped = s.prepare_request(req)
prepped.body = 'Seriously, send exactly these bytes.'
prepped.headers['Keep-Dead'] = 'parrot'
resp = s.send(prepped,
stream=stream,
verify=verify,
proxies=proxies,
cert=cert,
timeout=timeout
)
print(resp.status_code)
4、设置GET请求参数
1)放在url的?后面
url = "https://httpbin.org/get?key=val"
r = request.get(url)
2)放在params
payload = {'key1': 'value1', 'key2': 'value2'}
payload = {'key1': 'value1', 'key2': ['value2', 'value3']} 值可以是list
r = requests.get(url, params=payload)
5、设置POST请求参数
1)发送data参数
传递字典给data
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post("url", data=payload)
传递元祖列表给data,多个元素使用同一key
payload = (('key1', 'value1'), ('key1', 'value2'))
r = requests.post("url", data=payload)
传递字符串给data
import json
payload = {'some': 'data'}
r = requests.post(url, data=json.dumps(payload)) //dumps将python数据类型转为字符串
2)发送json参数(2.4.2 版的新加功能)
payload = {'some': 'data'}
r = requests.post(url, json=payload)
3)发送file参数
files = {'file': open('report.xls', 'rb')}
files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}
files = {'file': ('report.csv', 'some,data,to,send\nanother,row,to,send\n')}
r = requests.post(url, files=files)
6、设置请求头(Requests 不会基于定制 header 的具体情况改变自己的行为。只不过在最后的请求中,所有的 header 信息都会被传递进去)
headers = {'user-agent': 'my-app/0.0.1'}
r = requests.get(url, headers=headers)
7、设置cookies
cookies = dict(cookies_are='working')
r = requests.get(url, cookies=cookies)
8、设置请求延时
requests.get('url', timeout=0.001) //请求响应时间>timeout,报错
三、获取请求数据
1、获取请求头
r.request.headers
四、获取响应数据
1、获取响应编码
1)获取请求响应编码
r.encoding
2)设置请求响应编码
r.encoding = 'ISO-8859-1'
r.encoding = 'utf-8'
2、获取响应内容
1)获取文本响应内容,可以通过r.encoding设置文本编码方式,正常解析出文本内容
r.text
2)获取二进制数据
r.content
根据返回的二进制数据,创建图片
from PIL import Image
from io import BytesIO
i = Image.open(BytesIO(r.content))
3)获取json数据
r.json()
4)获取服务器原始套接字,urllib 的 response 对象
r = requests.get('url', stream=True)
r.raw.read()
5)边下载边存到硬盘
with open(filename, 'wb') as fd:
for chunk in r.iter_content(chunk_size=1028):
fd.write(chunk)
3、获取响应状态码
r.status_code
4、获取响应头
r.headers
r.headers['Content-Type']
r.headers.get('content-type')
5、获取cookie
r.cookies
r.cookies['example_cookie_name']
6、重定向
r = requests.get('url', allow_redirects=False) //重定向开关关闭,默认是打开
r.history //获取所有重定向的请求响应
r.history[0].headers //获取第一个重定向的响应头