内容简介:如通过打印输出该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参数
类似的链接格式为:
<协议>://<域名>/<接口>?<键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头部,只要简单地传递一个 dict
给 header
就可以实现。
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
参数禁用重定向处理。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- TiDB入门(四):从入门到“跑路”
- MyBatis从入门到精通(一):MyBatis入门
- MyBatis从入门到精通(一):MyBatis入门
- Docker入门(一)用hello world入门docker
- 赵童鞋带你入门PHP(六) ThinkPHP框架入门
- 初学者入门 Golang 的学习型项目,go入门项目
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。