中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

【譯】Python3中進行HTTP請求的4種方式

2018-07-20    來源:編程學(xué)習(xí)網(wǎng)

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用

python包索引(PyPI) 提供了超過10萬個代碼庫的包,它能夠幫助python程序員完成許多工作,無論是構(gòu)建web應(yīng)用程序還是分析數(shù)據(jù)。另外PyPI還提供了很多諸如 twilio 之類的API的 輔助庫 。

下面讓我們通過使用4個不同的 Python HTTP 庫來學(xué)習(xí)如何從 RESTful API 檢索和解析 JSON 數(shù)據(jù),以此來演示PyPI包的強大功能。

文中的每個示例都包含以下內(nèi)容:

  1. 定義要解析的URL,我們將使用Spotify API,因為它不需要在請求時進行身份驗證。

  2. 創(chuàng)建一個 HTTP GET 去請求這個URL。

  3. 解析返回的JSON數(shù)據(jù)。

我們將要使用的四個庫用了不同的方法得到同一個結(jié)果。如果你把結(jié)果輸出,將會看到一個有Spotify搜索結(jié)果的字典:

*注意:結(jié)果可能會根據(jù)你使用的Python版本而有所不同。在這篇文章中,所有的代碼都使用Python 3編寫。 如果你仍在使用Python 2.X,那么請考慮為Python 3設(shè)置一個virtualenv。

以下說明將幫助您使用virtualenv與Python 3:

  1. 為Python 3測試創(chuàng)建一個名為 pythreetest 的目錄。

  2. 一旦安裝了virtualenv,從項目目錄中執(zhí)行以下命令:

使用以下命令創(chuàng)建一個新的virtualenv:

virtualenv -p python3 myvenv

使用 source 命令激活 myvenv :

source myvenv/bin/activate

現(xiàn)在你將能夠使用 pip 安裝需要的庫,并在virtualenv中使用Python 3啟動解釋器,在那里您可以成功導(dǎo)入包。

urllib

urllib 是一個內(nèi)置在Python標(biāo)準(zhǔn)庫中的模塊,并使用 http.client 來實現(xiàn)HTTP和HTTPS協(xié)議的客戶端。 由于urllib是同Python一起進行分發(fā)和安裝的,因此無需使用 pip 進行安裝。 如果你重視穩(wěn)定性,那么這就是給你準(zhǔn)備的。 twilio-python助手庫 就使用了urllib。

urllib同其他庫比起來需要做更多的工作。 例如:你必須在發(fā)出HTTP請求之前創(chuàng)建一個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發(fā)送到CGI的stdin,并讀取返回給我們的數(shù)據(jù)。

Requests

Requests 是Python社區(qū)中最喜歡的庫,因為它簡潔易用。 Requests由 urllib3 提供支持,有玩笑說這是“唯一的非轉(zhuǎn)基因HTTP庫,適合人類消費”。

Requests 抽象了大量的程式化的代碼,使得HTTP請求比使用內(nèi)置urllib庫更簡單。

首先用pip進行安裝

pip install requests

向 Spotify 發(fā)送請求

import requests

r = requests.get('https://api.spotify.com/v1/search?type=artist&q=snoop')
r.json()

輸出結(jié)果:

from pprint import pprint
pprint(r.json())

我們剛剛向Spotify發(fā)出了一個 GET 請求,同時創(chuàng)建了一個名為 r 的 Response 對象,之后使用內(nèi)置的JSON解碼器來處理我們請求的內(nèi)容。

Octopus

Octopus 是為想要 GET 一切的開發(fā)人員準(zhǔn)備的。它允許你多任務(wù)去訪問Spotify。就像它的名字一樣,這個庫使用線程并發(fā)地檢索和報告HTTP請求的完成情況,同時可以使用你所熟悉的庫。

或者,你可以使用 Tornado 的 IOLoop 進行異步請求,不過在這里就不盡興嘗試了。

通過pip安裝:

pip install octopus-http

Octopus的設(shè)置比前面的例子稍微多一些。 我們必須構(gòu)建一個響應(yīng)處理器,并使用內(nèi)置的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 函數(shù)來使用線程Octopus請求。 我們從一個空的list開始, data ,并創(chuàng)建Octopus類的一個實例 dotto 。 最后配置了默認(rèn)設(shè)置。

然后我們構(gòu)建響應(yīng)處理器,其中的 response 參數(shù)是 Octopus.Response 的一個實例。 當(dāng)每個請求成功后,響應(yīng)內(nèi)容將被添加到數(shù)據(jù)列表中。在響應(yīng)處理器內(nèi)部,我們可以使用 Octopus 類的主要方法。 .enqueue 方法用于加入新的URL。

我們指定 .wait 方法等待隊列中的所有URL完成加載,然后對JSON列表進行JSON編碼并打印結(jié)果。

吁,終于結(jié)束了。

HTTPie

HTTPie 適用于希望快速與HTTP服務(wù)器、RESTful API 和 Web 服務(wù)進行交互的開發(fā)人員,它僅僅需要一行代碼。 這個庫是“一個可以讓你微笑的開源 CLI HTTP客戶端:用戶友好的 curl 替代方案”。雖然它可以不依賴Python環(huán)境,但是它可以通過Pip安裝,并用來創(chuàng)建HTTP請求。

pip install httpie

默認(rèn)協(xié)議是HTTP,但您可以創(chuàng)建一個別名,并重置HTTPS為默認(rèn)值,如下所示:

alias https='http —default-scheme=https'

之后創(chuàng)建請求:

https "https://api.spotify.com/v1/search?type=artist&q=snoop"

使用HTTPie僅需要URL就夠了。

最后的想法

Python 生態(tài)提供了許多與 JSON api 交互的選擇。雖然這些方法對于最簡單的請求是相似的, 但隨著 HTTP 請求的復(fù)雜性增加, 這些差異變得更加明顯。多進行嘗試, 看看哪一個最適合你的需求。你甚至可以嘗試用另一種語言, 如 Ruby。

來自:https://segmentfault.com/a/1190000010901374

 

標(biāo)簽: http服務(wù)器 代碼 服務(wù)器 搜索

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:使用Go語言與Ethereum智能合約進行交互

下一篇:從技巧、案例和工具入手,詳解性能優(yōu)化怎么做