Python HTTP库:requests快速入门
安装
- 最推荐的方式是使用Anaconda
conda install request
- 如果不想安装Anaconda,可以使用pip安装
pip install request
- 本地化httpbin测试工具
pip install gunicorn httpbin
gunicorn httpbin:app
(Windows平台不支持)
基本用法
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
的键不会被添加到URL的查询字符串中 - 字典中可以用列表作为键值添加到URL的查询字符串中
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
参数禁用重定向处理。
超时响应
timeout
参数设定的秒数时间之后停止等待响应,基本上所有的生产代码都应该使用这一参数,如果不使用,程序可能永远失去响应requests.get('http://github.com', timeout=0.001)
- referred:
上图的资料 在我的QQ技术交流群里(技术交流和资源共享,广告进来腿给你打断)
可以自助拿走,群号群里的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。
相关文章
- python实现进度条
- 【Python成长之路】python并发学习:多进程与多线程的用法及场景介绍
- Python高级特性(1):Iterators、Generators和itertools(转)
- web服务器http.server 【python】
- head first python 支持网站(可下载所有的代码和示例)
- python: 安装DeOldify库:黑白图片上色(Python 3.7.15)
- 小白学 Python(6):基础运算符(下)
- Python判断文件和文件夹是否存在的方法
- Python 字符串_python 字符串截取_python 字符串替换_python 字符串连接
- 零配置命令行HTTP服务器 http-server
- Python - 网络爬虫(Web Scraping)
- python 为空判断场景
- web服务器http.server 【python】
- Atitit 获取ip的http标头 目录 1.1. REMOTE_ADDR 是你的客户端跟你的服务器“握手”时候的IP1 1.2. HTTP_CLIENT_IP 客户ip。握手ip1 1.3
- 使用 http-proxy 代理 SAP UI5 应用发起的 HTTP 请求
- 8个Python免费网站,一周熟练Python,知道就是赚到!
- Python: 爬虫入门-python爬虫入门教程(非常详细)
- python程序员都在用到5个酷毙的Python工具
- Python编程语言学习:基于python各种库(matplotlib、Image)利用多种方法展示图片或进行图片可视化之详细攻略
- 已解决2.Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and wi
- 〖Python自动化办公篇㉑〗- python实现邮件自动化 - 定时发送邮件
- 拉格朗日插值代码python实现(不掉包)
- Ubuntu下完美切换Python版,即设置系统默认的python版本(亲测有效)
- python基础课程_学习笔记26:编程的乐趣
- Python标准库:内置函数dict(iterable, **kwarg)
- python基础===一行 Python 代码实现并行(转)
- python基础===Python 迭代器模块 itertools 简介
- python基础===Python 代码优化常见技巧
- 从零开始,学会Python爬虫不再难!!! -- (8)协程之上讲异步并发丨蓄力计划
- Python语言基础学习之Python基础之列表介绍和循环遍历