用python的Requests庫模擬http請求


一、先了解幾個重要的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-urlencodedmultipart/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 對象。
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') 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM