内容简介:如通过打印输出该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入门项目
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
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 格式化工具
HEX HSV 转换工具
HEX HSV 互换工具