国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - 使用基于Python的Tornado框架的HTTP客戶端的教程

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

2020-06-11 10:46C Wong Python

這篇文章主要介紹了制作一個基于Python的Tornado框架的HTTP客戶端的教程,Tornado的異步特性使其能夠獲得很好的性能,需要的朋友可以參考下

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

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

聽取了仙子君的意見, 直接對tornado.curl_httpclient.CurlAsyncHTTPClient進行封裝
安裝

首先從git clone 下代碼

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

然后安裝它

?
1
2
cd tornadohttpclient
python setup.py install

教程
GET

TornadoHTTPClient的get方法可以發起一個get請求

?
1
2
3
4
5
6
7
8
9
10
from tornadohttpclient import TornadoHTTPClient
 
# 實例化
http = TornadoHTTPClient()
 
# 發出get請求
http.get("http://www.linuxzen.com")
 
# 開始主事件循環
http.start()

POST

TornadoHTTPClient的post方法可以發起一個post請求
讀取響應

上面僅僅發出了請求, 但是我們無法讀取GET請求回來的數據, 我們可以使用一個回調來讀取響應

?
1
2
3
4
5
6
7
8
9
10
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關鍵字參數我們可以傳進一個回調函數, 當請求成功時會調用此函數, 并給此函數傳遞一個與urllib2.urlopen返回一樣的reponse實例
上傳文件

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

?
1
2
3
4
5
6
7
8
9
10
11
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傳遞參數

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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()

發送延遲請求

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
from tornadohttpclient import TornadoHTTPClient
 
http = TornadoHTTPClient()
 
def callback(response, times):
  print response.body
  if times < 9:
    # 延遲10秒發送此請求
    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()

給請求傳遞參數

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

?
1
2
3
4
5
6
7
8
9
10
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方法, 比如登錄網站

?
1
2
3
4
5
6
7
8
9
10
11
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關鍵字參數可以自定額外的HTTP頭信息, 參數類型為一個字典

指定User-Agent頭

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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方法可以設置代理, 其接受兩個參數, 分別是代理的 主機名/ip 代理的端口, unset_proxy可以取消代理

?
1
2
3
4
5
6
7
8
9
10
11
12
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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲精品中文字幕在线观看 | 国产一卡二卡三卡 | 国产美女精品 | 国产精品久久久久久久久福交 | 欧美日韩精品一区二区在线播放 | 国产精品久久久久久久久久久久久 | 黄在线免费观看 | 国产欧美精品一区二区三区 | 国产精品免费观看 | 日韩一区在线视频 | 亚洲一区二区av | 久久久免费| 久草最新 | 伊人激情综合网 | 亚洲一区亚洲二区 | 色婷婷av一区二区三区大白胸 | 中文字幕av一区二区三区 | 亚洲精品乱码久久久久久按摩观 | 国产高清无密码一区二区三区 | 希岛爱理av一区二区三区 | 性色网站 | 午夜视频一区二区三区 | 国产这里只有精品 | 色姑娘综合网 | 一区二区在线免费观看 | 男人的天堂久久 | 久久精品夜夜夜夜夜久久 | 三级色黄| 91看片网站 | 国产高潮呻吟av | 亚洲欧美在线综合 | 亚洲精品国产a | 超碰精品在线 | 亚洲黄色一区二区 | 欧美成人一区二区 | 不卡一区二区三区视频 | 狠狠狠狠狠狠干 | 色乱码一区二区三区网站 | 精品久久久久一区二区国产 | 免费午夜电影 | 中文字幕在线观看第一页 |