response的解析
解析请求的url: r.url
解析响应状态码:r.ststus_code
解析文本类型的response: r.text
r.text 用于解析respose内容为文本类型 requests会自动解码其中的内容
r.encoding #查看requests使用了什么编码或者设置自己的编码
如果你改变了编码,每当你访问 r.text ,Request 都将会使用 r.encoding 的新值
解析非文本类型的response: r.content
返回内容的类型为bytes
解析json格式的响应内容:r.json()
获得原始的socket response: r.raw
在罕见的情况下,你可能想获取来自服务器的原始套接字响应,那么你可以访问 r.raw,并设置 stream=True
获得response的headers
r = requets.post(xxxxx)
# 输出所有的header
print(r.headers)
# 输出Content-Type这个header值
print(r.headers['Content-Type'])
设置请求的header
为请求添加HTTP header,只要简单地传递一个 dict 给 headers 参数就可以了
下图是baidu接口的header字段
请求参数设置
参数拼接在url的?后面
如上,需要把具体参数放在一个由string类型的数据组成的dict里面,赋值给params这个参数字段名。 打印出请求的url,可以看到参数被编码进了url里面
在url中拼接请求参数常见于一些get请求
post请求的的请求参数
把请求参数作为form-encoded data(表单数据)发送
如上,把参数写在dict里面然后传递给data字段名
如果key和value的关系是一对多的关系,还可采用下面的两种形式存放参数
把请求参数作为json形式发送
如上,把参数数据从py对象手动转为json,然后传递给data字段名。
不过上面由于没有设置请求的header 即"Content-Type": "application/json",所以实际请求时可能不会把参数作为json发送出去,添加header如下
更方便的形式,是把参数传给json字段名,requests会自动帮我们自动转为json并添加header(2.4.2版本开始)
如果requests传递的参数中有参数data或者files,那么json参数会被自动忽略
cookies
在请求参数中携带cookie
把cookie的key与value放在dict中,然后传给参数字段cookies
结果
另一种方式是把cookie数据放在requests.cookies.RequestsCookieJar()中,然后传给参数字段cookies
RequestsCookieJar类型和dict和dict的操作和相似,适合跨域名和路径使用
解析response中的cookie
response中返回的cookies其类型为RequestsCookieJar
r = requests.get(xxxx)
#输出cookie,假设其中存在xxxxkey_of_cookies这样一个字段
print(r.cookies['xxxxkey_of_cookies'])
超时
HTTP请求发出后,在设定的时间内(timeout参数),还没有收到response,就不再等待response,直接抛出异常
关于超时的定义 官网文档有如下解释
简单说,超时与下载需要的时间无关,无论下载需要多久,都表示已经收到response了,超时是针对请求对应的服务的的response而言,在设定的时间内,如果一个字节的的socket response都没有,就是超时
错误与异常
所有Requests显式抛出的异常都继承自 requests.exceptions.RequestException
ConnectionError 异常
在出现网络问题、DNS查询失败、连接服务器失败等因素后,Requests 会抛出一个 ConnectionError 异常
如下,故意连接到一个不存在的url
执行结果
HTTPError 异常
发出HTTP请求后得到的response状态码以4或5开头(a 4XX client error or 5XX server error response), 通过方法:Response.raise_for_status(),可以手动释放一个异常
下面请求一个本地的httpbin服务接口