成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發 后端
python包索引(PyPI)提供了超過10萬個代碼庫的包,它能夠幫助python程序員完成許多工作,無論是構建web應用程序還是分析數據。另外PyPI還提供了很多諸如 twilio 之類的API的輔助庫。下面讓我們通過使用4個不同的 Python HTTP 庫來學習如何從 RESTful API 檢索和解析 JSON 數據,以此來演示PyPI包的強大功能。

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

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

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

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

  1. 定義要解析的URL,我們將使用Spotify API,因為它不需要在請求時進行身份驗證。
  2. 創建一個 HTTP GET 去請求這個URL。
  3. 解析返回的JSON數據。

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

 

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

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

  1. 為Python 3測試創建一個名為pythreetest的目錄。
  2. 一旦安裝了virtualenv,從項目目錄中執行以下命令:

使用以下命令創建一個新的virtualenv:

  1. virtualenv -p python3 myvenv 

使用source命令激活myvenv:

  1. source myvenv/bin/activate 

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

urllib

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

urllib同其他庫比起來需要做更多的工作。 例如:你必須在發出HTTP請求之前創建一個URL對象。

  1. import urllib.request 
  2. import urllib.parse 
  3.  
  4. url = 'https://api.spotify.com/v1/search?type=artist&q=snoop' 
  5. f = urllib.request.urlopen(url) 
  6. print(f.read().decode('utf-8'))  

在上面的例子中,我們將請求URL發送到CGI的stdin,并讀取返回給我們的數據。

Requests

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

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

首先用pip進行安裝

  1. pip install requests 

向 Spotify 發送請求

  1. import requests 
  2.  
  3. r = requests.get('https://api.spotify.com/v1/search?type=artist&q=snoop'
  4.  
  5. r.json()  

輸出結果:

  1. from pprint import pprint 
  2.  
  3. pprint(r.json())  

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

Octopus

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

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

通過pip安裝:

  1. pip install octopus-http 

Octopus的設置比前面的例子稍微多一些。 我們必須構建一個響應處理器,并使用內置的JSON庫對JSON進行編碼。

  1. import json 
  2.   
  3. from pprint import pprint 
  4. from octopus import Octopus 
  5.   
  6.   
  7. def create_request(urls): 
  8.     data = [] 
  9.   
  10.     otto = Octopus( 
  11.            concurrency=4, auto_start=True, cache=True, expiration_in_seconds=10 
  12.     ) 
  13.   
  14.     def handle_url_response(url, response): 
  15.         if "Not found" == response.text: 
  16.             print ("URL Not Found: %s" % url) 
  17.         else
  18.             data.append(response.text) 
  19.   
  20.     for url in urls: 
  21.         otto.enqueue(url, handle_url_response) 
  22.   
  23.     otto.wait() 
  24.   
  25.     json_data = json.JSONEncoder(indent=None, 
  26.                                  separators=(','': ')).encode(data) 
  27.   
  28.     return pprint(json_data) 
  29.   
  30.   
  31. print(create_request(['https://api.spotify.com/v1/search?type=artist&q=snoop'
  32.                      '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編碼并打印結果。

吁,終于結束了。

[[201778]]

 

HTTPie

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

  1. pip install httpie 

默認協議是HTTP,但您可以創建一個別名,并重置HTTPS為默認值,如下所示:

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

之后創建請求:

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

使用HTTPie僅需要URL就夠了。

 

 

最后的想法

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

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2021-08-30 14:23:05

BlazorHTTP請求

2021-08-13 13:39:29

云計算云計算環境云應用

2010-09-08 15:35:35

2018-01-04 09:46:48

PHPHTTP

2023-06-19 15:38:38

JavaScripAPI

2024-01-31 12:06:32

PostgreSQL遞歸函數查詢

2020-08-07 10:59:35

安全HTTP數據

2019-12-27 18:07:53

Python網絡爬蟲HTML

2024-04-15 16:11:33

C#HTTP請求.NET

2020-11-04 09:52:16

Python讀取圖片開發

2019-01-21 10:34:13

Linux運算命令

2017-08-17 13:56:30

JavascriptNode.jsHttp

2014-12-31 14:09:23

xml解析

2024-05-30 08:51:28

Spring數據分布式

2020-02-18 20:00:31

PostgreSQL數據庫

2020-02-06 10:10:24

python程序代碼

2010-04-15 15:52:12

Oracle數據庫

2011-06-29 16:25:11

Qt Signal Slot

2018-04-28 15:51:33

Mybatis方式傳遞

2024-07-01 12:42:58

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久亚洲综合 | 亚洲一区在线播放 | 毛片一区二区三区 | 久久久91精品国产一区二区三区 | 国产第一区二区 | 亚洲精品视频一区二区三区 | 日本小电影网站 | 夜夜av | 青青久久久| 久久一区二区三区四区 | 久久精品中文 | 亚洲高清视频一区二区 | 人人射人人 | 欧美在线观看一区 | 超碰高清 | 欧美二级 | 中文字幕国产视频 | 国产精品美女久久久 | 欧美日韩一区二区视频在线观看 | 中文字幕福利 | 国产一级视频在线观看 | 综合精品久久久 | 亚洲网在线 | 久久久久9999亚洲精品 | 亚洲成人999 | 成年男女免费视频网站 | 一区二区三区高清不卡 | 国产人成精品一区二区三 | 九九九久久国产免费 | 亚洲成人一二区 | 精品伊人 | 日韩精品久久久久久 | 国产成人91视频 | 欧美一区二区大片 | 337p日韩 | 99久久精品免费看国产四区 | 国产成人免费视频网站高清观看视频 | 亚洲第一在线 | 懂色一区二区三区免费观看 | 五月天国产视频 | 中文在线播放 |