@Dukebf
2017-07-12T00:14:04.000000Z
字数 1253
阅读 1502
python
requests
轮子出处:
Python-第三方库requests详解
中文官网
英文官网
请求实例
import requests
requests.get('http://www.dict.baidu.com/s',params={'wd','python'})
import request,json
r = requests.post('https://api.github.com/some/endpoint', data=json.dumps({'some': 'data'}))
print(r.json())
r.status_code #响应状态码
r.raw #返回原始响应体,也就是 urllib 的 response 对象,使用 r.raw.read() 读取
r.content #字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩
r.text #字符串方式的响应体,会自动根据响应头部的字符编码进行解码
r.headers #以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不> 存在则返回None
r.apparent_encoding #返回网站编码
将输出的编码设置为网站的编码,将下面一行放在 r.text 前,或者其他要输出字符串前,可以避免乱码
r.encoding = r.apparent_encoding
特殊方法
r.json() Requests中内置的JSON解码器
r.raise_for_status() #失败请求(非200响应)抛出异常
遇到网络问题(如:DNS 查询失败,拒绝连接等)时,Requests 会抛出一个 ConnectionError 异常。
如果 HTTP 请求返回了不成功的状态码,Response.raise_for_status() 会抛出一个 HTTPError 异常。
若请求超时,则抛出一个 Timeout 异常。
若请求超过了设定的最大重定向次数,则会抛出一个 TooManyRedirects 异常。
所有 Requests 显式抛出的异常都继承自 requests.exceptions.RequestException.
例子
判断网络连接错误与超时
try:
requests.get('https://google.com',timeout=1)
except requests.exceptions.ConnectTimeout:
NETWORK_STATUS = False
except requests.exceptions.Timeout:
REQUEST_TIMEOUT = True