1.安装
pip install requests
2.导入
import requests
3.常用函数
requests.post('http://httpbin.org/post', data = {'key':'value'})
requests.put('http://httpbin.org/put', data = {'key':'value'})
requests.delete('http://httpbin.org/delete')
requests.head('http://httpbin.org/get')
requests.options('http://httpbin.org/get')
4.给url添加参数
会以键值对的方式跟在 ? 后面,例如httpbin.org/get?key=val
Requests可以使用params关键字参数来传递url参数,以一个字符串字典来提供参数
params = {'key':'value'}
r = requests.get('http://httpbin.org/get',params=params)
# url: http://httpbin.org/get?key=value
或者一个key值对应多个value值
payload = {'key1': 'value1', 'key2': ['value2', 'value3']}
r = requests.get('http://httpbin.org/get', params=payload)
# url: http://httpbin.org/get?key1=value1&key2=value2&key2=value3
5.响应内容
r.text可以获取到返回的内容
r.encoding获取返回的编码类型,也可以自己手动更改编码,那么在之后的请求中,都将使用encoding的新的值
二进制响应内容
r.content 对于非文本的请求,可以字节的形式请求响应体,Requests会自动解码gzip和deflate传输编码的响应数据
保存一张图片,图片在传输过程中是以字节的形式存在,在保存时使用r.content写入到文件中
r = requests.get('http://img.zcool.cn/community/0117e2571b8b246ac72538120dd8a4.jpg@1280w_1l_2o_100sh.jpg')
with open('fp.jpg','wb') as img:
img.write(r.content)
json响应内容
r.json() 内置的JSON解码器,处理json数据
json数据解析失败时会抛出异常;json数据解析成功也并不代表响应成功,有可能返回的错误数据就是json格式的
判断是否响应成功,使用r.raise_for_status()或者r.status_code判断
原始响应内容
r.raw 获取来自服务器的原始套接字响应,同时需要设置stream=True
r = requests.get('http://httpbin.org',stream=True)
print(r.raw.read()) # read会读取所有的数据,可以传入int参数
print(r.text)
定制请求头
传递一个dict数据给headers参数
所有的headers必须是string,tytestring或者unicode类型
headers = {'user-agent':'test-app'}
r = requests.get('http://httpbin.org/get',headers=headers)
6.复杂的POST请求
发送一些编码为表单的数据,只需要传递dict给data参数,在请求时会自动编码为表单形式
payload = {'key1': 'value1', 'key2': 'value2'}
payload = (('key1', 'value1'), ('key1', 'value2'))
r = requests.post('http://httpbin.org/post', data=payload)
数据:"form": {
"key": "value"
}
如果想发送出去的数据就是string类型,而不是form表单数据的话,可以这么做
params = {'key':'value'}
r = requests.post('http://httpbin.org/post',data=json.dumps(params))
数据: "json": {
"key": "value"
}
也可以直接使用json参数传递,不需要dumps了
requests.post(url, json=payload)
7.POST发送文件
url = 'http://httpbin.org/post'
files = {'file': open('report.xls', 'rb')}
r = requests.post(url, files=files)
可以显式地设置文件名,文件类型和请求头
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')}
8.Cookie
从cookie中获取值
r.cookies['example_cookie_name']
发送cookie到服务器
cookies = dict(cookies_are='working')
r = requests.get('http://httpbin.org/cookies',cookies=cookies)
Cookie的返回对象是RequestsCookieJar,行为和dict类似,适合跨域名跨路径使用
jar = requests.cookies.RequestsCookieJar()
jar.set('tasty_cookie', 'yum', domain='httpbin.org', path='/cookies')
jar.set('gross_cookie', 'blech', domain='httpbin.org', path='/elsewhere')
url = 'http://httpbin.org/cookies'
r = requests.get(url, cookies=jar)
9.超时
在请求可以传入timeout参数,设置指定时间后,如果没有请求成功,则停止响应
timeout只对连接有效,与响应体的下载无关
timeout并不是整个下载响应的时间限制,而是服务器在timeout秒内没有应答
requests.get('http://github.com', timeout=0.001)
10.错误与异常
网络问题(DNS查询失败,拒绝连接等),抛出ConnectionError异常
返回不成功的状态码,Response.raise_for_status()抛出一个HTTPError异常
请求超时,抛出Timeout异常
请求超过设定的最大重定向次数,抛出一个TooManyRedirects异常