翻译:疯狂的技术宅
原文标题:HTTP Requests in Python 3
原文连接:https://www.twilio.com/blog/2...
本文首发微信公众号:充实的脑洞html
相关文章:【译】深刻解析Node.js中5种发起HTTP请求的方法python
python包索引(PyPI)提供了超过10万个代码库的包,它可以帮助python程序员完成许多工做,不管是构建web应用程序仍是分析数据。另外PyPI还提供了不少诸如 twilio 之类的API的辅助库。git
下面让咱们经过使用4个不一样的 Python HTTP 库来学习如何从 RESTful API 检索和解析 JSON 数据,以此来演示PyPI包的强大功能。程序员
文中的每一个示例都包含如下内容:github
定义要解析的URL,咱们将使用Spotify API,由于它不须要在请求时进行身份验证。web
建立一个 HTTP GET 去请求这个URL。json
解析返回的JSON数据。segmentfault
咱们将要使用的四个库用了不一样的方法获得同一个结果。若是你把结果输出,将会看到一个有Spotify搜索结果的字典:api
*注意:结果可能会根据你使用的Python版本而有所不一样。在这篇文章中,全部的代码都使用Python 3编写。 若是你仍在使用Python 2.X,那么请考虑为Python 3设置一个virtualenv。
如下说明将帮助您使用virtualenv与Python 3:bash
为Python 3测试建立一个名为pythreetest
的目录。
一旦安装了virtualenv,从项目目录中执行如下命令:
使用如下命令建立一个新的virtualenv:
virtualenv -p python3 myvenv
使用source
命令激活myvenv
:
source myvenv/bin/activate
如今你将可以使用pip
安装须要的库,并在virtualenv中使用Python 3启动解释器,在那里您能够成功导入包。
urllib是一个内置在Python标准库中的模块,并使用http.client
来实现HTTP和HTTPS协议的客户端。 因为urllib是同Python一块儿进行分发和安装的,所以无需使用 pip 进行安装。 若是你重视稳定性,那么这就是给你准备的。 twilio-python助手库就使用了urllib。
urllib同其余库比起来须要作更多的工做。 例如:你必须在发出HTTP请求以前建立一个URL对象。
import urllib.request import urllib.parse url = 'https://api.spotify.com/v1/search?type=artist&q=snoop' f = urllib.request.urlopen(url) print(f.read().decode('utf-8'))
在上面的例子中,咱们将请求URL发送到CGI的stdin,并读取返回给咱们的数据。
Requests是Python社区中最喜欢的库,由于它简洁易用。 Requests由urllib3提供支持,有玩笑说这是“惟一的非转基因HTTP库,适合人类消费”。
Requests 抽象了大量的程式化的代码,使得HTTP请求比使用内置urllib库更简单。
首先用pip进行安装
pip install requests
向 Spotify 发送请求
import requests r = requests.get('https://api.spotify.com/v1/search?type=artist&q=snoop') r.json()
输出结果:
from pprint import pprint pprint(r.json())
咱们刚刚向Spotify发出了一个GET
请求,同时建立了一个名为r
的Response
对象,以后使用内置的JSON解码器来处理咱们请求的内容。
Octopus是为想要GET
一切的开发人员准备的。它容许你多任务去访问Spotify。就像它的名字同样,这个库使用线程并发地检索和报告HTTP请求的完成状况,同时可使用你所熟悉的库。
或者,你可使用 Tornado 的 IOLoop 进行异步请求,不过在这里就不尽兴尝试了。
经过pip安装:
pip install octopus-http
Octopus的设置比前面的例子稍微多一些。 咱们必须构建一个响应处理器,并使用内置的JSON库对JSON进行编码。
import json from pprint import pprint from octopus import Octopus def create_request(urls): data = [] otto = Octopus( concurrency=4, auto_start=True, cache=True, expiration_in_seconds=10 ) def handle_url_response(url, response): if "Not found" == response.text: print ("URL Not Found: %s" % url) else: data.append(response.text) for url in urls: otto.enqueue(url, handle_url_response) otto.wait() json_data = json.JSONEncoder(indent=None, separators=(',', ': ')).encode(data) return pprint(json_data) print(create_request(['https://api.spotify.com/v1/search?type=artist&q=snoop', 'https://api.spotify.com/v1/search?type=artist&q=dre']))
在上面的代码片断中,咱们定义了create_requests
函数来使用线程Octopus请求。 咱们从一个空的list开始,data
,并建立Octopus类的一个实例dotto
。 最后配置了默认设置。
而后咱们构建响应处理器,其中的response
参数是Octopus.Response
的一个实例。 当每一个请求成功后,响应内容将被添加到数据列表中。在响应处理器内部,咱们可使用Octopus
类的主要方法。.enqueue
方法用于加入新的URL。
咱们指定.wait
方法等待队列中的全部URL完成加载,而后对JSON列表进行JSON编码并打印结果。
吁,终于结束了。
HTTPie适用于但愿快速与HTTP服务器、RESTful API 和 Web 服务进行交互的开发人员,它仅仅须要一行代码。 这个库是“一个可让你微笑的开源 CLI HTTP客户端:用户友好的 curl 替代方案”。虽然它能够不依赖Python环境,可是它能够经过Pip安装,并用来建立HTTP请求。
pip install httpie
默认协议是HTTP,但您能够建立一个别名,并重置HTTPS为默认值,以下所示:
alias https='http —default-scheme=https'
以后建立请求:
https "https://api.spotify.com/v1/search?type=artist&q=snoop"
使用HTTPie仅须要URL就够了。
Python 生态提供了许多与 JSON api 交互的选择。虽然这些方法对于最简单的请求是类似的, 但随着 HTTP 请求的复杂性增长, 这些差别变得更加明显。多进行尝试, 看看哪个最适合你的需求。你甚至能够尝试用另外一种语言, 如 Ruby。
关注微信公众号:充实的脑洞, 一个技术宅的保留地 | |
---|---|
![]() |