一、先了解幾個重要的http請求頭或響應頭信息
Request Headers:
Host: 描述請求將被發送的目的地,包括,且僅僅包括域名和端口號。 Origin: 說明請求從哪里發起的,包括,且僅僅包括協議和域名,並沒有包含涉及到用戶隱私的URL路徑和請求內容。可以防止CSRF的攻擊。origin只用於Post請求。 Referer: 告知服務器請求的原始資源的URI,包括:協議+域名+查詢參數(注意,不包含錨點信息)。其用於所有類型的請求。 因為原始的URI中的查詢參數可能包含ID或密碼等敏感信息,如果寫入referer,則可能導致信息泄露。
Reponse Headers:
Location: 重定向之后要跳轉的地址
二、用requests庫,模擬http請求:
1.導入 requests 模塊:
注:如果沒有安裝,先要通過 pip install requests 安裝requests模塊
import requests
2.發送get請求
res = requests.get('https://www.baidu.com')
3.發送帶參數的get請求
payload = {'key1': 'value1', 'key2': 'value2'} res = requests.get("http://www.baidu.com", params=payload)
通過打印輸出該 URL,你能看到 URL 已被正確編碼:
print(res.url) http://www.baidu.com?key2=value2&key1=value1
你還可以將一個列表作為值傳入:
payload = {'key1': 'value1', 'key2': ['value2', 'value3']} res = requests.get('http://www.baidu.com', params=payload) print(res.url) http://www.baidu.com?key1=value1&key2=value2&key2=value
4.發送post請求
res = requests.post('http://httpbin.org/post', data = {'key':'value'})
(1)通常,你想要發送一些編碼為表單形式的數據——非常像一個 HTML 表單,
對應Content-Type:application/x-www-form-urlencoded或multipart/form-data,默認是前者,multipart/form-data一般是文件上傳時使用。
要實現這個,只需簡單地傳遞一個字典(名稱/值對的形式)給 data 參數。你的數據字典在發出請求時會自動編碼為表單形式:
payload = {'key1': 'value1', 'key2': 'value2'} res = requests.post("http://httpbin.org/post", data=payload) print(res.text)
結果:
{
...
"form": {
"key2": "value2",
"key1": "value1"
},
...
}
(2)很多時候你想要發送的數據並非編碼為表單形式的,而是json格式的(本質就是字符串),對應Content-Type:application/json。有兩種方法:
方法一:
import json
url = 'https://api.github.com/some/endpoint' payload = {'some': 'data'} res = requests.post(url, data=json.dumps(payload))
方法二:
url = 'https://api.github.com/some/endpoint' payload = {'some': 'data'} res = requests.post(url, json=payload)
三、http請求的響應
res = requests.get('http://en.wikipedia.org/wiki/Monty_Python')
任何時候進行了類似 requests.get() 的調用,你都在做兩件主要的事情。
其一,你在構建一個 Request 對象, 該對象將被發送到某個服務器請求或查詢一些資源。
其二,一旦 requests 得到一個從服務器返回的響應就會產生一個 Response 對象。該響應對象包含服務器返回的所有信息,也包含你原來創建的 Request 對象。
任何時候進行了類似 requests.get() 的調用,你都在做兩件主要的事情。
其一,你在構建一個 Request 對象, 該對象將被發送到某個服務器請求或查詢一些資源。
其二,一旦 requests 得到一個從服務器返回的響應就會產生一個 Response 對象。該響應對象包含服務器返回的所有信息,也包含你原來創建的 Request 對象。
res.headers --> 服務器返回給我們的響應頭部信息 res.request.headers --> 發送到服務器的請求的頭部信息 res.status_code --> 響應狀態碼 res.text --> 以文本的方式訪問請求響應體 res.content --> 以字節(二進制)的方式訪問請求響應體 res.url --> 服務器接收到的請求URL res.cookies --> 響應返回的cookies,返回對象為<RequestsCookieJar[xxxx]> res.history --> 響應對象的 history 方法來追蹤重定向 res.history[0].headers.get('Set-Cookie')