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

2021-09-23 02:16:11 字數 3882 閱讀 9177

python包索引(pypi)提供了超過10萬個**庫的包,它能夠幫助python程式設計師完成許多任務作,無論是構建web應用程式還是分析資料。另外pypi還提供了很多諸如 twilio 之類的api的輔助庫。

下面讓我們通過使用4個不同的 python http 庫來學習如何從 restful api 檢索和解析 json 資料,以此來演示pypi包的強大功能。

文中的每個示例都包含以下內容:

定義要解析的url,我們將使用spotify api,因為它不需要在請求時進行身份驗證。

建立乙個 http get 去請求這個url。

解析返回的json資料。

我們將要使用的四個庫用了不同的方法得到同乙個結果。如果你把結果輸出,將會看到乙個有spotify搜尋結果的字典:

*注意:結果可能會根據你使用的python版本而有所不同。在這篇文章中,所有的**都使用python 3編寫。 如果你仍在使用python 2.x,那麼請考慮為python 3設定乙個virtualenv。

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

為python 3測試建立乙個名為pythreetest的目錄。

一旦安裝了virtualenv,從專案目錄中執行以下命令:

使用以下命令建立乙個新的virtualenv:

virtualenv -p python3 myvenv 

使用source命令啟用myvenv:

source myvenv/bin/activate 

現在你將能夠使用pip安裝需要的庫,並在virtualenv中使用python 3啟動直譯器,在那裡您可以成功匯入包。

urllib

urllib是乙個內建在python標準庫中的模組,並使用http.client來實現http和https協議的客戶端。 由於urllib是同python一起進行分發和安裝的,因此無需使用 pip 進行安裝。 如果你重視穩定性,那麼這就是給你準備的。 twilio-python助手庫就使用了urllib。

import urllib.request 

import urllib.parse 

url = ''

f = urllib.request.urlopen(url) 

print(f.read().decode('utf-8'))  

在上面的例子中,我們將請求url傳送到cgi的stdin,並讀取返回給我們的資料。

requests

requests是python社群中最喜歡的庫,因為它簡潔易用。 requests由urllib3提供支援,有玩笑說這是「唯一的非轉基因http庫,適合人類消費」。

requests 抽象了大量的程式化的**,使得http請求比使用內建urllib庫更簡單。

首先用pip進行安裝

pip install requests 

向 spotify 傳送請求

import requests 

r = requests.get('') 

r.json()  

輸出結果:

from pprint import pprint 

pprint(r.json())  

我們剛剛向spotify發出了乙個get請求,同時建立了乙個名為r的response 物件,之後使用內建的json解碼器來處理我們請求的內容。

octopus

octopus是為想要get一切的開發人員準備的。它允許你多工去訪問spotify。就像它的名字一樣,這個庫使用執行緒併發地檢索和報告http請求的完成情況,同時可以使用你所熟悉的庫。

或者,你可以使用 tornado 的 ioloop 進行非同步請求,不過在這裡就不盡興嘗試了。

通過pip安裝:

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: 

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(['', 

'']))  

在上面的**片段中,我們定義了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請求。

預設協議是http,但您可以建立乙個別名,並重置https為預設值,如下所示:

之後建立請求:

使用httpie僅需要url就夠了。

最後的想法

python 生態提供了許多與 json api 互動的選擇。雖然這些方法對於最簡單的請求是相似的, 但隨著 http 請求的複雜性增加, 這些差異變得更加明顯。多進行嘗試, 看看哪乙個最適合你的需求。你甚至可以嘗試用另一種語言, 如 ruby。

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

python包索引 pypi 提供了超過10萬個 庫的包,它能夠幫助python程式設計師完成許多任務作,無論是構建web應用程式還是分析資料。另外pypi還提供了很多諸如 twilio 之類的api的輔助庫。下面讓我們通過使用4個不同的 python http 庫來學習如何從 restful ap...

python3呼叫http介面

最近在寫python呼叫介面的服務,寫了乙個呼叫介面的函式,如下 param inputdata 單個樣本的輸入引數,是json格式的資料 return 單個樣本的探真查詢變數結果資料 呼叫介面 介面有正確的資料才讀入,否則為空 if res code 0000 res data json.load...

python3進行excel操作

只要有需求,就會找出解決問題的方法 pip install xlrd 讀取 pip install xlwt 寫入 首先先初始化 import xlwt excel xlwt.workbook encoding utf 8 建立excel sheet excel.add sheet member 建...