Python HTTP库:requests快速入门

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

内容简介:如通过打印输出该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 参数禁用重定向处理。


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

查看所有标签

猜你喜欢:

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

Programming Ruby

Programming Ruby

Dave Thomas、Chad Fowler、Andy Hunt / Pragmatic Bookshelf / 2004-10-8 / USD 44.95

Ruby is an increasingly popular, fully object-oriented dynamic programming language, hailed by many practitioners as the finest and most useful language available today. When Ruby first burst onto the......一起来看看 《Programming Ruby》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

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

HEX HSV 互换工具