一、发送请求
1.1 GET
r
=requests
.get
(url
)
1.2 POST
r
=requests
.post
(url
,[data
={key
:value
}])
1.3 其他
put、delete、head、options等采取和GET、POST一样的格式
二、传递参数
2.1 构建请求体
data
={'key1':'value1','key2':'value2'}
request
=requests
.get
(url
,params
=data
)
2.1.1 列表传值
data
={'key1':'value1','key2':['value2','value3']}
request
=requests
.get
(url
,params
=data
)
三、响应内容
3.1 打印响应内容
request
=requests
.get
(url
)
print(r
.text
)
Requests会自动解码,所以可以直接打印。
3.2 更改编码格式
r
.encoding
='编码'
3.3 保存响应内容
with open(filename
,'wb') as f
:
for chunck
in r
:
f
.write
(chunck
)
四、请求
4.1 定制请求头
headers
={'user-agent':'内容'}
request
=requests
.get
(url
,headers
=headers
)
如果设置了用户认证,那么headers设置的授权将不会生效如果请求遭到重定向,那么header会被删除代理授权header会被URL中提供的代理身份覆盖Requests不会基于定制header改变自己的行为所有header值必须是string、bytestring或者unicode
4.2 复杂请求
4.2.1 定制POST请求
4.2.1.1 字典表单
data
={'key1':'value1','key2':'value2'}
request
=requests
.post
(url
,data
=data
)
对于data,可以自己进行json编码,如果没有,Requests会自动编码。
4.2.1.2 元组表单
data
=(('key1','value1'),('key2','value2'))
request
=requests
.post
(url
,data
=data
)
4.2.2 POST提交多编码文件
4.2.2.1 文件直接上传
file={'file':open(filename
,'rb')}
request
=requests
.post
(url
,files
=file)
4.2.2.2 生成文件上传
file={'file':(filename
,'content1,congtent2\ncontent3,content4\n...')}
request
=requests
.post
(url
,files
=file)
五、响应状态码
5.1 检测响应状态码
5.1.1 打印
request
=requests
.get
(url
)
print(request
.status_code
)
5.1.2 响应码对象校验
print(request
.status_code
==requests
.codes
.ok
)
5.2 错误请求的处理
5.2.1 异常抛出
bad_r
=requests
.get
(url
)
bad_r
.raise_for_status
()
六、Cookie
6.1 打印Cookie
request
=requests
.get
(url
)
print(request
.cookies
['CookieName'])
6.2 发送Cookie到服务器
cookie
=dict(CookieNmae
='value')
request
=requests
.get
(url
,cookies
=cookies
)
6.3 发送多Cookie
cookies
=requests
.cookies
.RequestCookieJar
()
cookies
.set('cookie1','value1',domain
='域名',path
='路径1')
cookies
.set('cookie2','value2',domain
='域名',path
='路径2')
request
=reqeusts
.get
(url
,cookies
=cookies
)
七、重定向
除了HEAD,Requests会自动处理所有重定向,可以使用history方法来追踪,也可以使用allow_redirects禁用重定向。
7.1 重定向追踪
request
=requests
.get
(url
)
print(request
.history
)
7.2 禁用重定向
request=requests.get(url,allow_redirests=False)
八、超时与其他异常
8.1 超时处理
为避免程序永久失去响应,我们可以设置timeout参数,这样当请求达到一定时常后,程序就会抛出异常。
requests
.get
(url
,timeout
=0.001)
8.2 其他异常
ConnectionError:网络问题。DNS查询失败、拒绝连接等
HTTPError:返回了不成功的状态码
Timeout:请求超时
TooManyRedirects:超过设定的最大重定向次数