欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

TornadoHTTPClient 是一個基于Tornado的高效的異步HTTP客戶端庫, 支持Cookie和代理, 目前僅在Python2.7平臺上測試過, 不支持Python3

聽取了仙子君的意見, 直接對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ā)起一個get請求

from tornadohttpclient import TornadoHTTPClient

# 實例化
http = TornadoHTTPClient()

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

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

POST

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

上面僅僅發(fā)出了請求, 但是我們無法讀取GET請求回來的數(shù)據(jù), 我們可以使用一個回調(diào)來讀取響應(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()

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

upload方法可以上傳文件, 其接受一個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ù)

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

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ā)送延遲請求

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

from tornadohttpclient import TornadoHTTPClient

http = TornadoHTTPClient()

def callback(response, times):
  print response.body
  if times < 9:
    # 延遲10秒發(fā)送此請求
    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()

給請求傳遞參數(shù)

TornadoHTTPClient 的 get/post方法的第二個參數(shù)params可以定義請求時傳遞的參數(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ù)類型為一個字典

指定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è)置代理, 其接受兩個參數(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會自動記錄和裝載Cookie, 可以通過 TornadoHTTPClient實例屬性 cookie 獲取Cookie

相關(guān)文章

  • python實現(xiàn)字典(dict)和字符串(string)的相互轉(zhuǎn)換方法

    python實現(xiàn)字典(dict)和字符串(string)的相互轉(zhuǎn)換方法

    這篇文章主要介紹了python實現(xiàn)字典(dict)和字符串(string)的相互轉(zhuǎn)換方法,涉及Python字典dict的遍歷與字符串轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下
    2017-03-03
  • Python生成個性簽名圖片獲取GUI過程解析

    Python生成個性簽名圖片獲取GUI過程解析

    這篇文章主要介紹了Python生成個性簽名圖片獲取GUI過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • 對python中不同模塊(函數(shù)、類、變量)的調(diào)用詳解

    對python中不同模塊(函數(shù)、類、變量)的調(diào)用詳解

    今天小編就為大家分享一篇對python中不同模塊(函數(shù)、類、變量)的調(diào)用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python中閉包與lambda的作用域解析

    Python中閉包與lambda的作用域解析

    這篇文章主要介紹了Python中閉包與lambda的作用域解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • pyqt5+opencv?實現(xiàn)讀取視頻數(shù)據(jù)的方法

    pyqt5+opencv?實現(xiàn)讀取視頻數(shù)據(jù)的方法

    這篇文章主要介紹了pyqt5+opencv?實現(xiàn)讀取視頻數(shù)據(jù)的方法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • python爬蟲之request模塊深入講解

    python爬蟲之request模塊深入講解

    requests是python實現(xiàn)的簡單易用的HTTP庫,使用起來比urllib簡潔很多,下面這篇文章主要給大家介紹了關(guān)于python爬蟲之request模塊的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-03-03
  • python3 xpath和requests應(yīng)用詳解

    python3 xpath和requests應(yīng)用詳解

    這篇文章主要介紹了python3 xpath和requests應(yīng)用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • 教你怎么用python連接sql server

    教你怎么用python連接sql server

    今天教大家怎么用python連接sql server,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • django框架兩個使用模板實例

    django框架兩個使用模板實例

    這篇文章主要介紹了django框架使用模板方法,結(jié)合兩個具體實例形式詳細(xì)分析了Django框架模板的相關(guān)使用技巧與操作注意事項,需要的朋友可以參考下
    2019-12-12
  • python pyppeteer 破解京東滑塊功能的代碼

    python pyppeteer 破解京東滑塊功能的代碼

    這篇文章主要介紹了python pyppeteer 破解京東滑塊功能的代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03

最新評論