参考资料:Python Requests库官方文档
发送请求
在使用requests模块时,首先要将它导入:
import requests
requests发送请求的方式与六种HTTP请求相同,分别是:
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的查询字符串传递某种数据,并以一个字符串字典来提供这些参数。例如:
payload = {'key1' : 'value1', 'key2' : 'value2'}
r = requests.get('url', params = payload)
读取服务器的响应内容
requests库可以自动解码来自服务器的内容,可以使用r.text来访问这些内容:
r = requests.get('url')
print(r.text)
可以使用r.encoding来改变响应内容的编码,以此来避免中文乱码:
r.encoding = 'UTF-8'
读取二进制响应内容
可以通过r.content来以字节的形式访问响应内容:
r = requests.get('url')
print(r.content)
读取JSON响应内容
可以使用r.json来处理JSON数据:
r = requests.get('url')
print(r.json())
如果JSON解析失败,r.json()就会抛出一个异常。
查看原始响应内容
在初始请求中设置了stream = True的情况下,可以用r.raw获取来自服务器的原始套接字响应:
r = requests.get('url', stream = True)
print(r.raw)
定制请求头
可以通过headers参数来添加请求头:
headers = {'X-Forwarded-For' : '127.0.0.1'}
r = requests.get('url', headers = headers)
发送更加复杂的POST请求
如果需要发送一些编码为表单形式的数据,可以传递一个字典或者元组给data参数:
payload = {'key1' : 'value1', 'kay2' : 'value2'}
r = requests.post('url', data = payload)
或者
payload = (('key1' : 'value1', 'key2' : 'value2'))
r = requests.post('url', data = payload)
如果在表单中多个元素使用一个key,最好使用元组列表的方式。
检测响应状态码
可以使用r.status_code检测状态码:
r = requests.get('url')
print(r.status_code)
还可以使用requests库自带的状态码查询对象来检测请求是否成功:
r.status_code == requests.codes.ok
查看响应头
响应头以字典形式展示,可以使用r.headers来查看:
print(r.headers)
因为HTTP头对大小写不敏感,所以可以使用任意大写形式来访问这些响应头字段:
以下两条语句完全等价:
print(r.headers['Content-Type'])
print(r.headers.ger('content-type'))
查看Cookie
如果某个相应包含一些Cookie,可以使用r.cookies来访问它们:
r = requests.get('url')
print(r.cookies['cookie_name'])
也可以使用cookies参数发送自己的cookie到服务器:
cookies = {'admin' : '1'}
r = requests.get('url', cookies = cookies)
超时
可以告诉requests在经过以timeout参数设定的秒数时间之后停止等待响应,防止脚本停止响应:
r = requests.get('url', timeout = 1)
会话对象
会话对象可以跨请求保持某些参数,也可以在同一个Session实例发出的所有请求之间保持cookie。
以下代码可以跨请求保持cookie:
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。
网友评论