Python HTTP库:requests快速入门

栏目: 后端 · 前端 · 发布时间: 5年前

内容简介:如通过打印输出该URL,可以看到URL已被正确编码,有两点需要注意的地方:
url = 'http://httpbin.org/'
r = requests.get(url, 'get')
r = requests.post(url, 'post')
r = requests.put(url, 'put')
r = requests.delete('http://httpbin.org/delete')
r = requests.head('http://httpbin.org/get')
r = requests.options('http://httpbin.org/get')
复制代码

request.get ,就是以 GET 方式发送一个 REQUEST ,得到一个 Response 类的结果 r ,然后可以从 r 中获取所需的和HTTP相关的信息。

request.get('http://httpbin.org/', 'get') == request.get('http://httpbin.org/get')

传递URL参数

movie.douban.com/subject/304…

类似的链接格式为:

<协议>://<域名>/<接口>?<键1>=<值1>&<键2>=<值2>

Resquest库允许使用 params 关键字参数,以一个字符串字典来提供这些参数。

param = {'key1': 'value1', 'key2': 'value2'}
r = requests.get("http://httpbin.org/get", params=param)
print(r.url)
>>http://httpbin.org/get?key2=value2&key1=value1
复制代码

通过打印输出该URL,可以看到URL已被正确编码,有两点需要注意的地方:

None
param = {'key1': 'value1', 'key2': None }
r = requests.get("http://httpbin.org/get", params=param)
print(r.url)
>>http://httpbin.org/get?key1=value1
param = {'key1': 'value1', 'key2': ['value2', 'value3']}
r = requests.get("http://httpbin.org/get", params=param)
print(r.url)
>>http://httpbin.org/get?key2=value2&key2=value3&key1=value1
复制代码

响应内容

Requests会主动解码来自服务器的内容,大多数unicode字符集都能被无缝解码

import requests
r = requests.get('https://api.github.com/events')
r.text
#<class 'str'>使用其推测的文本编码
r.encoding
#查看Requests使用的编码方式
r.encoding = 'utf-8'
#修改Requests使用的编码方式
r.content
#<class 'byte'>获取编码
#Requests会自动解码gzip和deflatte传输编码的响应数据
复制代码

在需要的情况下Requests也可以使用定制的编码,如果创建了自己的编码并使用codecs模块进行注册,就可以轻松地使用这个解码器名称作为 r.encoding 的值,然后由Requests来处理编码。

JSON响应

import requests
r = requests.get('https://api.github.com/events')
r.json()
>>[{u'repository': {u'open_issues': 0, u'url': 'https://github.com/...
复制代码

如果JSON解码失败, r.json() 会抛出一个异常,例如,响应内容是401(Unauthorized),尝试访问 r.json() 将会抛出 ValueError: No JSON object could be decoded 异常。成功调用 r.json() 并不意味着响应成功,失败的响应中可能也包含JSON对象(比如 HTTP 500错误细节)。要检查请求是否成功,需要使用 r.raise_for_status() 或者检查 r.status_code 是否和期望值相同。 r.status_code == requests.codes.ok

定制响应头

如果想要为请求添加HTTP头部,只要简单地传递一个 dictheader 就可以实现。

url = 'https://api.github.com/some/endpoint'
headers = {'user-agent': 'my-app/0.0.1'}
r = requests.get(url, headers=headers)
#Attention:定制header的优先级低于某些特定的信息源
复制代码
  • 如果在 .netrc 中设置了用户认证信息,使用 headers=设置的授权就不会生效。而如果设置了auth=参数, .netrc 的设置就无效
  • 如果被重定向到别的主机,授权 header 就会被删除
  • 代理授权header会被URL中提供的代理身份覆盖掉
  • 在我们能判断内容长度的情况下,header 的 Content-Length 会被改写

重定向与请求历史

默认情况下,除了HEAD, Request会自动处理所有重定向,可以使用响应对象的 history 方法来追踪重定向。

Response.history 是一个 Response 对象的列表,为了完成请求而创建的对象,这个对象列表按照从最老到最近的请求进行排序。

r = requests.get('http://github.com')
    print(r.url)
    print(r.status_code)
    print(r.history)
>>https://github.com/
>>200
>>[<Response [301]>]
复制代码

如果使用GET/ OPTIONS/ POST/ PUT/ PATCH/ HEAD/ DELETE,可以通过 allow_redirects 参数禁用重定向处理。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

高性能网站建设指南

高性能网站建设指南

Steve Souders / 刘彦博 / 电子工业出版社 / 2008年 / 35.00元

本书结合Web 2.0以来Web开发领域的最新形势和特点,介绍了网站性能问题的现状、产生的原因,以及改善或解决性能问题的原则、技术技巧和最佳实践。重点关注网页的行为特征,阐释优化Ajax、CSS、JavaScript、Flash和图片处理等要素的技术,全面涵盖浏览器端性能问题的方方面面。在《高性能网站建设指南》中,作者给出了14条具体的优化原则,每一条原则都配以范例佐证,并提供了在线支持。《高性能......一起来看看 《高性能网站建设指南》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具