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

来源:互联网 发布:桝太一 知乎 编辑:程序博客网 时间:2024/06/16 11:42

       前面文章我们一直在介绍请求,各种请求方法的使用,作为请求回来的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,我们主要要学会这些代码含义。

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

2. Response对象的所有API

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 requestsr = 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)
输出内容:

200OK{'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 requestsr = requests.get('https://api.github.com')print(r.encoding)print(r.raw)print(r.content)print(r.text)print(r.json())

运行输出结果


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


原创粉丝点击