[Python] Requests 只取 HEADER

最近的伺服器好像很厲害👍,最初的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 回來。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *