最近的伺服器好像很厲害👍,最初的1~2千個 http request 的 response time 都很快,被發現短期間大量對 server 做 request 時,會被拉長 response time ,程式原本 3分鐘可以做完,結果現在跑了 1小時,才跑一點點。@_@;
我的需求是要測試網址是否存在,不需要傳回伺服器裡的實際內容,由原本的http get request 修改為 http head request,實作步驟如下。
安裝 requests
requests
模組可以使用 pip
來安裝:
# 安裝 Python 2 的 requests 模組 pip install requests # 安裝 Python 3 的 requests 模組 pip3 install requests2
附註:現在人應該都改用 python3 了吧。
GET
request
一般常見的GET
請求的範例:
import requests r = requests.get('https://www.google.com.tw/') print(r.status_code)
如果取得 200 就成功了。
POST
request
r = requests.post('http://your-url.com/post', data = {'key':'value'})
PUT, DELETE, HEAD, OPTIONS request
r = requests.put('http://your-url.com', data = {'key':'value'}) r = requests.delete('http://your-url.com') r = requests.head('http://your-url.com) r = requests.options('http://your-url.com')
自訂 Header
有些網站會擋掉 UA 是 python-request 的請求
url = ‘https://your-url.com’
headers = {‘user-agent’: ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0.3 Safari/604.5.6’}
r = requests.get(url, headers=headers)
設定 Timeout
requests.get('your-url.com', timeout=[SECOND])
URL 重導
Send a GET request and do not allow redirects
url = "http://your-redirect-url.com" print(requests.get(url, allow_redirects = False).text
如果想要取得 redirect history ,範例:
response = requests.get('http://httpbin.org/redirect/3') for resp in response.history: print("{}\t{}".format(resp.status_code, resp.url))
測試結果
改用 HEAD 和 GET 的效果一樣,會被伺服器抓到大量在存取 server ,連線的效率上會好一點點,因為沒有去 download response content 回來。