亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

【譯】Python3中進(jìn)行HTTP請(qǐng)求的4種方式

lordharrd / 738人閱讀

摘要:由于是同一起進(jìn)行分發(fā)和安裝的,因此無(wú)需使用進(jìn)行安裝。首先用進(jìn)行安裝向發(fā)送請(qǐng)求輸出結(jié)果我們剛剛向發(fā)出了一個(gè)請(qǐng)求,同時(shí)創(chuàng)建了一個(gè)名為的對(duì)象,之后使用內(nèi)置的解碼器來(lái)處理我們請(qǐng)求的內(nèi)容。當(dāng)每個(gè)請(qǐng)求成功后,響應(yīng)內(nèi)容將被添加到數(shù)據(jù)列表中。

翻譯:瘋狂的技術(shù)宅
原文標(biāo)題:HTTP Requests in Python 3
原文鏈接:https://www.twilio.com/blog/2...
本文首發(fā)微信公眾號(hào):充實(shí)的腦洞

相關(guān)文章:【譯】深入解析Node.js中5種發(fā)起HTTP請(qǐng)求的方法

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

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

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

定義要解析的URL,我們將使用Spotify API,因?yàn)樗恍枰谡?qǐng)求時(shí)進(jìn)行身份驗(yàn)證。

創(chuàng)建一個(gè) HTTP GET 去請(qǐng)求這個(gè)URL。

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

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

*注意:結(jié)果可能會(huì)根據(jù)你使用的Python版本而有所不同。在這篇文章中,所有的代碼都使用Python 3編寫(xiě)。 如果你仍在使用Python 2.X,那么請(qǐng)考慮為Python 3設(shè)置一個(gè)virtualenv。
以下說(shuō)明將幫助您使用virtualenv與Python 3:

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

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

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

virtualenv -p python3 myvenv

使用source命令激活myvenv

source myvenv/bin/activate

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

urllib

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

urllib同其他庫(kù)比起來(lái)需要做更多的工作。 例如:你必須在發(fā)出HTTP請(qǐng)求之前創(chuàng)建一個(gè)URL對(duì)象。

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"))

在上面的例子中,我們將請(qǐng)求URL發(fā)送到CGI的stdin,并讀取返回給我們的數(shù)據(jù)。

Requests

Requests是Python社區(qū)中最喜歡的庫(kù),因?yàn)樗?jiǎn)潔易用。 Requests由urllib3提供支持,有玩笑說(shuō)這是“唯一的非轉(zhuǎn)基因HTTP庫(kù),適合人類(lèi)消費(fèi)”。

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

首先用pip進(jìn)行安裝

pip install requests

向 Spotify 發(fā)送請(qǐng)求

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ā)出了一個(gè)GET請(qǐng)求,同時(shí)創(chuàng)建了一個(gè)名為rResponse 對(duì)象,之后使用內(nèi)置的JSON解碼器來(lái)處理我們請(qǐng)求的內(nèi)容。

Octopus

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

或者,你可以使用 Tornado 的 IOLoop 進(jìn)行異步請(qǐng)求,不過(guò)在這里就不盡興嘗試了。

通過(guò)pip安裝:

pip install octopus-http

Octopus的設(shè)置比前面的例子稍微多一些。 我們必須構(gòu)建一個(gè)響應(yīng)處理器,并使用內(nèi)置的JSON庫(kù)對(duì)JSON進(jìn)行編碼。

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ù)來(lái)使用線程O(píng)ctopus請(qǐng)求。 我們從一個(gè)空的list開(kāi)始,data,并創(chuàng)建Octopus類(lèi)的一個(gè)實(shí)例dotto。 最后配置了默認(rèn)設(shè)置。

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

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

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

HTTPie

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

pip install httpie

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

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

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

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

使用HTTPie僅需要URL就夠了。

最后的想法

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

關(guān)注微信公眾號(hào):充實(shí)的腦洞, 一個(gè)技術(shù)宅的保留地

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/40802.html

相關(guān)文章

  • 】深入解析Node.js5發(fā)起HTTP請(qǐng)求方法

    摘要:在中有相當(dāng)多的解決方案,其中有語(yǔ)言內(nèi)置功能,也有開(kāi)源社區(qū)貢獻(xiàn)的開(kāi)發(fā)庫(kù)。缺點(diǎn)是與其他解決方案相比,用起來(lái)不是那么友好。默認(rèn)情況下,可以解析響應(yīng),非常方便。與類(lèi)似,是另一個(gè)流行的庫(kù),主要用于瀏覽器中的請(qǐng)求,但也適用于。 翻譯:瘋狂的技術(shù)宅英文標(biāo)題:5 Ways to Make HTTP Requests in Node.js原文鏈接:https://www.twilio.com/blog/...

    Tamic 評(píng)論0 收藏0
  • 】Python優(yōu)雅技巧

    摘要:你可以進(jìn)行如下操作需要注意的是這個(gè)竅門(mén)只適用于。在中就不需要進(jìn)行操作了,因?yàn)樗呀?jīng)默認(rèn)進(jìn)行了。這里有幾個(gè)例子可以供你參考譯文出處本文根據(jù)的所譯,整個(gè)譯文帶有我自己的理解與思想,如果譯得不好或有不對(duì)之處還請(qǐng)同行朋友指點(diǎn)。 枚舉 不要這么做: i = 0 for item in iterable: print i, item i += 1 而是這樣: for...

    legendaryedu 評(píng)論0 收藏0
  • Centos下編安裝python3

    摘要:下載源碼包安裝的依賴(lài)首1 下載Python3源碼包 wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz 2 安裝Python3的依賴(lài) 首先我們要先下載Python3的所有依賴(lài)包,否則安裝安裝完后會(huì)出現(xiàn)各種問(wèn)題 yum install gcc patch libffi-deve...

    sanyang 評(píng)論0 收藏0
  • Centos下編安裝python3

    摘要:下載源碼包安裝的依賴(lài)首1 下載Python3源碼包 wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz 2 安裝Python3的依賴(lài) 首先我們要先下載Python3的所有依賴(lài)包,否則安裝安裝完后會(huì)出現(xiàn)各種問(wèn)題 yum install gcc patch libffi-deve...

    187J3X1 評(píng)論0 收藏0
  • [][Tkinter 教程02] Message 控件

    摘要:已獲原作者授權(quán)原系列地址控件控件用來(lái)展示一些文字短消息和控件有些類(lèi)似但在展示文字方面比要靈活比如控件可以改變字體而控件只能使用一種字體它提供了一個(gè)換行對(duì)象以使文字可以斷為多行它可以支持文字的自動(dòng)換行及對(duì)齊這里要澄清一下前面提到的控件可以改變 已獲原作者授權(quán). 原系列地址: Python Tkinter Message 控件 Message 控件用來(lái)展示一些文字短消息. Message...

    JowayYoung 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<