参考资料:Python Requests库官方文档

发送请求

在使用requests模块时,首先要将它导入:

1
import requests

requests发送请求的方式与六种HTTP请求相同,分别是:

1
2
3
4
5
6
GET: r = requests.get('url')
POST: r = requests.post('url', data = {'key' : 'value'})
PUT: r = requests.put('url', data = {'key' : 'value'})
DELETE: r = requests.delete('url')
HEAD: r = requests.head('url')
OPTIONS: r = requests.options('url')

请求发出后,我们就得到了一个名为r的response对象,可以从这个对象中获取需要的信息。

传递URL参数

可以使用params关键字为URL的查询字符串传递某种数据,并以一个字符串字典来提供这些参数。例如:

1
2
payload = {'key1' : 'value1', 'key2' : 'value2'}
r = requests.get('url', params = payload)

读取服务器的响应内容

requests库可以自动解码来自服务器的内容,可以使用r.text来访问这些内容:

1
2
r = requests.get('url')
print(r.text)

可以使用r.encoding来改变响应内容的编码,以此来避免中文乱码:

1
r.encoding = 'UTF-8'

读取二进制响应内容

可以通过r.content来以字节的形式访问响应内容:

1
2
r = requests.get('url')
print(r.content)

读取JSON响应内容

可以使用r.json来处理JSON数据:

1
2
r = requests.get('url')
print(r.json())

如果JSON解析失败,r.json()就会抛出一个异常。

查看原始响应内容

在初始请求中设置了stream = True的情况下,可以用r.raw获取来自服务器的原始套接字响应:

1
2
r = requests.get('url', stream = True)
print(r.raw)

定制请求头

可以通过headers参数来添加请求头:

1
2
headers = {'X-Forwarded-For' : '127.0.0.1'}
r = requests.get('url', headers = headers)

发送更加复杂的POST请求

如果需要发送一些编码为表单形式的数据,可以传递一个字典或者元组给data参数:

1
2
payload = {'key1' : 'value1', 'kay2' : 'value2'}
r = requests.post('url', data = payload)

或者

1
2
payload = (('key1' : 'value1', 'key2' : 'value2'))
r = requests.post('url', data = payload)

如果在表单中多个元素使用一个key,最好使用元组列表的方式。

检测响应状态码

可以使用r.status_code检测状态码:

1
2
r = requests.get('url')
print(r.status_code)

还可以使用requests库自带的状态码查询对象来检测请求是否成功:

1
r.status_code == requests.codes.ok

查看响应头

响应头以字典形式展示,可以使用r.headers来查看:

1
print(r.headers)

因为HTTP头对大小写不敏感,所以可以使用任意大写形式来访问这些响应头字段:

以下两条语句完全等价:

1
2
print(r.headers['Content-Type'])
print(r.headers.ger('content-type'))

查看Cookie

如果某个相应包含一些Cookie,可以使用r.cookies来访问它们:

1
2
r = requests.get('url')
print(r.cookies['cookie_name'])

也可以使用cookies参数发送自己的cookie到服务器:

1
2
cookies = {'admin' : '1'}
r = requests.get('url', cookies = cookies)

超时

可以告诉requests在经过以timeout参数设定的秒数时间之后停止等待响应,防止脚本停止响应:

1
r = requests.get('url', timeout = 1)

会话对象

会话对象可以跨请求保持某些参数,也可以在同一个Session实例发出的所有请求之间保持cookie。

以下代码可以跨请求保持cookie:

1
2
3
s = requests.Session()
s.get('url1')
r = s.get('url2')

请求与响应对象

当进行了类似requests.get()的调用时,会构建一个requests对象,这个对象会被发送到某个服务器来请求或查询一些资源。当requests得到一个从服务器返回的响应时,会产生一个response对象。

如果要访问服务器返回的响应头的信息,可以使用r.headers;如果想得到发送到服务器的请求头部,可以使用r.request.headers。

错误与异常

遇到网络问题(如:DNS 查询失败、拒绝连接等)时,Requests 会抛出一个 ConnectionError 异常。

如果 HTTP 请求返回了不成功的状态码,Response.raise_for_status()会抛出一个 HTTPError异常。

若请求超时,则抛出一个Timeout异常。

若请求超过了设定的最大重定向次数,则会抛出一个TooManyRedirects异常。

所有Requests显式抛出的异常都继承自requests.exceptions.RequestException。

最后更新: 2019年05月16日 11:19

原始链接: qnkcdz0.xyz/2019/05/16/requests库学习笔记/