requests的快速入门

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异常

你可能感兴趣的:(requests的快速入门)