最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用基于Python的Tornado框架的HTTP客戶端的教程

 更新時(shí)間:2015年04月24日 09:15:37   作者:C Wong  
這篇文章主要介紹了制作一個(gè)基于Python的Tornado框架的HTTP客戶端的教程,Tornado的異步特性使其能夠獲得很好的性能,需要的朋友可以參考下

由于tornado內(nèi)置的AsyncHTTPClient功能過(guò)于單一, 所以自己寫了一個(gè)基于Tornado的HTTP客戶端庫(kù), 鑒于自己多處使用了這個(gè)庫(kù), 所以從項(xiàng)目中提取出來(lái), 寫成一個(gè)單獨(dú)庫(kù) tornadohttpclient

TornadoHTTPClient 是一個(gè)基于Tornado的高效的異步HTTP客戶端庫(kù), 支持Cookie和代理, 目前僅在Python2.7平臺(tái)上測(cè)試過(guò), 不支持Python3

聽取了仙子君的意見, 直接對(duì)tornado.curl_httpclient.CurlAsyncHTTPClient進(jìn)行封裝
安裝

首先從git clone 下代碼

git clone https://github.com/coldnight/tornadohttpclient.git

然后安裝它

cd tornadohttpclient
python setup.py install

教程
GET

TornadoHTTPClient的get方法可以發(fā)起一個(gè)get請(qǐng)求

from tornadohttpclient import TornadoHTTPClient

# 實(shí)例化
http = TornadoHTTPClient()

# 發(fā)出get請(qǐng)求
http.get("http://www.linuxzen.com")

# 開始主事件循環(huán)
http.start()

POST

TornadoHTTPClient的post方法可以發(fā)起一個(gè)post請(qǐng)求
讀取響應(yīng)

上面僅僅發(fā)出了請(qǐng)求, 但是我們無(wú)法讀取GET請(qǐng)求回來(lái)的數(shù)據(jù), 我們可以使用一個(gè)回調(diào)來(lái)讀取響應(yīng)

from tornadohttpclient import TornadoHTTPClient

http = TornadoHTTPClient()

def callback(response):
  print response.body
  http.stop()

http.get("http://www.linuxzen.com", callback = callback)
http.start()

通過(guò)callback關(guān)鍵字參數(shù)我們可以傳進(jìn)一個(gè)回調(diào)函數(shù), 當(dāng)請(qǐng)求成功時(shí)會(huì)調(diào)用此函數(shù), 并給此函數(shù)傳遞一個(gè)與urllib2.urlopen返回一樣的reponse實(shí)例
上傳文件

upload方法可以上傳文件, 其接受一個(gè)url和文件的field和文件路徑, 還有其他post參數(shù)

from tornadohttpclient import TornadoHTTPClient

http = TornadoHTTPClient()
def callback(response):
  print("打開圖片鏈接", end = " ")
  print(response.effective_url)
  http.stop()

http.upload("http://paste.linuxzen.com", "img", "img_test.png",
          callback = callback)
http.start()

給callback傳遞參數(shù)

有時(shí)候callback可能需要訪問局部變量, 可以通過(guò) args和kwargs關(guān)鍵字參數(shù), 將callback的參數(shù)傳遞給get/post方法, args參數(shù)將會(huì)在response參數(shù)之后被傳遞, args參數(shù)類型應(yīng)當(dāng)是一個(gè)元組, kwargs參數(shù)類型應(yīng)當(dāng)是一個(gè)字典

from tornadohttpclient import TornadoHTTPClient

http = TornadoHTTPClient()

def callback(response, times):
  print response.body
  print times

  if times == 9:
    http.stop()

for i in range(10):
  http.get("http://www.linuxzen.com", callback = callback, args = (i, ))

http.start()

發(fā)送延遲請(qǐng)求

有時(shí)我們需要延遲幾秒也發(fā)送請(qǐng)求或每隔幾秒就發(fā)送一個(gè)請(qǐng)求, get/post方法的delay關(guān)鍵字參數(shù)可以解決, delay參數(shù)接受一個(gè)單位為秒的數(shù)字, 并延遲delay秒后發(fā)起請(qǐng)求

from tornadohttpclient import TornadoHTTPClient

http = TornadoHTTPClient()

def callback(response, times):
  print response.body
  if times < 9:
    # 延遲10秒發(fā)送此請(qǐng)求
    http.get("http://www.linuxzen.com", callback = callback, args = (times + 1, ), delay = 10)
  else:
    http.stop()

http.get("http://www.linuxzen.com", callback = callback, args = (1, ))
http.start()

給請(qǐng)求傳遞參數(shù)

TornadoHTTPClient 的 get/post方法的第二個(gè)參數(shù)params可以定義請(qǐng)求時(shí)傳遞的參數(shù)params的類型為字典或者((key, value), )類型的元組或列表,例如使用百度搜索TornadoHTTPClient

from tornadohttpclient import TornadoHTTPClient

http = TornadoHTTPClient()

def callback(response):
  print response.body
  http.stop()

http.get("http://www.baidu.com/s", (("wd", "tornado"),), callback = callback)
http.start()

以上也使用與POST方法, 比如登錄網(wǎng)站

from tornadohttpclient import TornadoHTTPClient

http = TornadoHTTPClient()

def callback(response):
  print response.body
  http.stop()

http.post("http://ip.or.domain/login", (("username", "cold"), ("password", "pwd")), callback = callback)

http.start()

指定HTTP頭

TornadoHTTPClient 的get/post方法的 headers關(guān)鍵字參數(shù)可以自定額外的HTTP頭信息, 參數(shù)類型為一個(gè)字典

指定User-Agent頭

from tornadohttpclient import TornadoHTTPClient

http = TornadoHTTPClient()

def callback(response):
  print response.body
  http.stop()

headers = dict((("User-Agent",
        "Mozilla/5.0 (X11; Linux x86_64)"\
        " AppleWebKit/537.11 (KHTML, like Gecko)"\
        " Chrome/23.0.1271.97 Safari/537.11"), ))

http.get("http://www.linuxzen.com", headers=headers, callback = callback)

使用代理

TornadoHTTPClient 的set_proxy方法可以設(shè)置代理, 其接受兩個(gè)參數(shù), 分別是代理的 主機(jī)名/ip 代理的端口, unset_proxy可以取消代理

from tornadohttpclient import TornadoHTTPClient

http = TornadoHTTPClient()

def callback(response):
  print response.body
  http.unset_proxy()
  http.stop()

http.set_proxy("127.0.0.1", 8087)
http.get("http://shell.appspot.com", callback = callback)
http.start()

Cookie

TornadoHTTPClient會(huì)自動(dòng)記錄和裝載Cookie, 可以通過(guò) TornadoHTTPClient實(shí)例屬性 cookie 獲取Cookie

相關(guān)文章

  • 如何利用飾器實(shí)現(xiàn) Python 函數(shù)重載

    如何利用飾器實(shí)現(xiàn) Python 函數(shù)重載

    這篇文章主要介紹了如何利用飾器實(shí)現(xiàn) Python 函數(shù)重載,需要的朋友可以參考下面文章內(nèi)容,希望能幫助到你
    2021-09-09
  • Numpy對(duì)數(shù)組的操作:創(chuàng)建、變形(升降維等)、計(jì)算、取值、復(fù)制、分割、合并

    Numpy對(duì)數(shù)組的操作:創(chuàng)建、變形(升降維等)、計(jì)算、取值、復(fù)制、分割、合并

    這篇文章主要介紹了Numpy對(duì)數(shù)組的操作:創(chuàng)建、變形(升降維等)、計(jì)算、取值、復(fù)制、分割、合并,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • python爬蟲框架scrapy下載中間件的編寫方法

    python爬蟲框架scrapy下載中間件的編寫方法

    這篇文章主要介紹了python爬蟲框架scrapy下載中間件,在每一個(gè)scrapy工程中都有一個(gè)名為 middlewares.py 的文件,這個(gè)就是中間件文件,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2022-03-03
  • Python解決多線程運(yùn)行異步代碼報(bào)錯(cuò)"There?is?no?current?event?loop"

    Python解決多線程運(yùn)行異步代碼報(bào)錯(cuò)"There?is?no?current?event?loop

    在Python開發(fā)中,我們經(jīng)常需要同時(shí)處理高并發(fā)網(wǎng)絡(luò)請(qǐng)求和CPU密集型任務(wù),不過(guò)當(dāng)嘗試在多線程環(huán)境中運(yùn)行異步代碼時(shí),可能會(huì)報(bào)錯(cuò)"There?is?no?current?event?loop",下面我們看看具體的解決方法吧
    2025-04-04
  • pip指定python位置安裝軟件包的方法

    pip指定python位置安裝軟件包的方法

    今天小編就為大家分享一篇pip指定python位置安裝軟件包的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • Python圖像濾波處理操作示例【基于ImageFilter類】

    Python圖像濾波處理操作示例【基于ImageFilter類】

    這篇文章主要介紹了Python圖像濾波處理操作,結(jié)合實(shí)例形式分析了Python基于ImageFilter類實(shí)現(xiàn)的濾波處理相關(guān)操作技巧,需要的朋友可以參考下
    2019-01-01
  • 使用python?dateutil庫(kù)輕松處理日期和時(shí)間

    使用python?dateutil庫(kù)輕松處理日期和時(shí)間

    這篇文章主要介紹了使用python?dateutil庫(kù)輕松處理日期和時(shí)間實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Python新手教程之while循環(huán)20例

    Python新手教程之while循環(huán)20例

    循環(huán)的作用就是讓指定的代碼重復(fù)的執(zhí)行,while循環(huán)最常用的應(yīng)用場(chǎng)景就是讓執(zhí)行的代碼按照指定的次數(shù)重復(fù)執(zhí)行,這篇文章主要給大家介紹了關(guān)于Python新手教程之while循環(huán)20例的相關(guān)資料,需要的朋友可以參考下
    2024-05-05
  • No module named ‘win32gui‘ 的解決方法(踩坑之旅)

    No module named ‘win32gui‘ 的解決方法(踩坑之旅)

    這篇文章主要介紹了No module named ‘win32gui‘ 的解決方法(踩坑之旅),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 利用PyCharm Profile分析異步爬蟲效率詳解

    利用PyCharm Profile分析異步爬蟲效率詳解

    這篇文章主要給大家介紹了關(guān)于如何利用PyCharm Profile分析異步爬蟲效率的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用PyCharm具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05

最新評(píng)論

鄂托克前旗| 文成县| 炉霍县| 社旗县| 洮南市| 云南省| 腾冲县| 汉沽区| 铁岭市| 乌拉特前旗| 岫岩| 达日县| 顺平县| 隆尧县| 天台县| 濮阳市| 塔河县| 天津市| 简阳市| 新野县| 泽州县| 新闻| 台中市| 积石山| 墨玉县| 正阳县| 大安市| 贵州省| 朝阳县| 河池市| 元氏县| 河南省| 霸州市| 华蓥市| 诸城市| 泾阳县| 汾阳市| 栖霞市| 都匀市| 新疆| 百色市|