使用requests请求后的响应内容
使用Requests进行get请求或post请求后,requests会返回一个Response对象;
这个Response对象包含许多我们需要的东西;
response = requests.get('https://www.baidu.com')
状态码
Response对象有一个status_code
属性,它表示服务器返回的状态码:
print(response.status_code)
200表示服务器成功接受了我们的请求并返回;404表示请求的页面不存在;
返回的内容
你可以使用text属性获取服务器响应的内容:
response.text
使用text属性读取的内容都已经被Requests自动解码。大多数的字符集都能被Requests正确的解码。
请求发出后,Requests 会基于 HTTP 头部对响应的编码作出有根据的推测。当你访问response.text
之时,Requests 会使用其推测的文本编码。你可以找出 Requests 使用了什么编码,并且能够使用response.encoding
属性来改变它:
如果你改变了编码,每次访问.text
时,Requests都会使用.encoding
的新值;
如果你创建了自己的编码,你应该使用response.content
来获取未被解码的二进制内容;
Requests会自动解码使用gzip或deflate进行编码压缩的数据。
读取JSON响应内容
Requests内置了一个JSON解码器,是你读取JSON内容变得非常简单:
response.json()
json()
方法会返回一个JSON对象;如果JSON解码失败,它会抛出一个ValueError: No JSON object could be decoded异常
原始RAW流
如果你想获取服务器返回的原始数据流,你可以使用response.raw
,它将返回一个HTTPResponse对象,你可以使用该对象的read()
方法读取内容。
如果你确实要这么干,你应该在最初的请求中设置stream=True
:
response = requests.get('https://www.baidu.com/',stream=True)
response.raw.read(10)
当数据过大时,应使用response.iter_content()
方法来处理。
将完整的数据保存为文件:
with open(filename, 'wb') as fd:
for chunk in response.iter_content(chunk_size):
fd.write(chunk)