欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

requests库入门-12-response对象的API

程序员文章站 2022-06-11 15:54:26
...

       前面文章我们一直在介绍请求,各种请求方法的使用,作为请求回来的response对象,没有过多介绍。这篇就来介绍response的对象和常用的API。我们不管是接口测试还是爬虫,最关心的是请求回来的数据的提取。本文介绍的这些方法,能够让你完成这个数据解析和提取的目的。

1. HTTP状态码

       前面我们也输出过response.status_code,如果请求正常,返回的是一个200这个数字。除了200,我们有必要了解一些常见的HTTP状态码的含义,这里我们打开wiki,地址是https://zh.wikipedia.org/wiki/HTTP%E7%8A%B6%E6%80%81%E7%A0%81,我们主要要学会这些代码含义。

requests库入门-12-response对象的API

       我们大致要知道,1xx表示消息,一般很少用到。2xx表示请求成功,最常见的是200。3xx表示重定向。4xxx表示请求错误,例如400一般表示参数错误,404表示请求的内容在服务器上不存在。5xx表示服务器错误,常见的有,500,服务器内部错误,503访问过载,504网关超时。其他的有兴趣自己去看看。

2. Response对象的所有API

Response对象,提供了很多API,供我们使用,达到不同的目的,主要分一下两组。

requests库入门-12-response对象的API

左边:

       第一个status_code,返回的是状态码。headers是用来查看相应头部内容。url是输出当前请求地址。history是给出相应调整历史记录。elapsed是记录得到这个响应花费的时间。

右边:

       第一个encoding是获取响应的编码类型,一般是utf-8。raw是直接读取该响应数据。content和text文件有一点区别,content是Batch treatment文件类型,输出前面会有一个b,text是转换unicode格式输出。json就是采用json格式输出响应内容,这个json我们用得比较多。

3.举例

1)左侧API演示

import requests

r = requests.get('https://api.github.com')

print(r.status_code)
print(r.reason)
print(r.headers)
print(r.url)
print(r.history)
print(r.elapsed)
print(r.request)
输出内容:

200
OK
{'Date': 'Tue, 29 Aug 2017 09:38:16 GMT', 'Content-Type': 'application/json; charset=utf-8',
 'Transfer-Encoding': 'chunked', 'Server': 'GitHub.com', 'Status': '200 OK', 
'X-RateLimit-Limit': '60', 'X-RateLimit-Remaining': '59', 'X-RateLimit-Reset': '1504003096', 
'Cache-Control': 'public, max-age=60, s-maxage=60', 'Vary': 'Accept, Accept-Encoding',
 'ETag': 'W/"7dc470913f1fe9bb6c7355b50a0737bc"', 'X-GitHub-Media-Type': 'github.v3; format=json',
 'Access-Control-Expose-Headers': 'ETag, Link, X-GitHub-OTP, X-RateLimit-Limit,
 X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes,
 X-Poll-Interval', 'Access-Control-Allow-Origin': '*', 'Content-Security-Policy': "default-src 
'none'", 'Strict-Transport-Security': 'max-age=31536000; includeSubdomains; preload', 
'X-Content-Type-Options': 'nosniff', 'X-Frame-Options': 'deny', 'X-XSS-Protection': '1; mode=block',
 'X-Runtime-rack': '0.011608', 'Content-Encoding': 'gzip',
 'X-GitHub-Request-Id': '1030:2E7FE:11B2A53:169E501:59A53606'}

https://api.github.com/
[]
0:00:02.328633
<PreparedRequest [GET]>

上面可以看到该请求得到respons数据,花费了2.328633秒,这个在国内服务器上,这个性能是不能接受的。

2)右侧API演示

import requests

r = requests.get('https://api.github.com')

print(r.encoding)
print(r.raw)
print(r.content)
print(r.text)
print(r.json())

运行输出结果

requests库入门-12-response对象的API

      上面输出内容很多,只好截图看看。上面的格式还是不太好看,从这里看不出text和json有多大区别。如果是在postman工具里,json显示就会更舒服,显示层次清晰。