Python - HTTP請求



HTTP或超文字傳輸協議基於客戶端-伺服器模型。通常,Web瀏覽器是客戶端,託管網站的計算機是伺服器。在Python中,我們使用requests模組建立HTTP請求。這是一個非常強大的模組,可以處理HTTP通訊的許多方面,不僅僅是簡單的請求和響應資料。它可以處理身份驗證、壓縮/解壓縮、分塊請求等。

HTTP客戶端以請求訊息的形式向伺服器傳送HTTP請求,該請求訊息包括以下格式:

  • 請求行
  • 零個或多個報頭(通用|請求|實體)欄位,後跟CRLF
  • 空行(即,CRLF之前沒有任何內容的行),表示報頭欄位的結束
  • 可選的訊息體

以下部分解釋了HTTP請求訊息中使用的每個實體。

請求行

請求行以方法標記開頭,後跟請求URI和協議版本,最後以CRLF結尾。元素之間用空格SP字元分隔。

Request-Line = Method SP Request-URI SP HTTP-Version CRLF

讓我們討論請求行中提到的每個部分。

請求方法

請求**方法**指示要對給定**請求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

執行訊息環回測試以及到目標資源的路徑。

請求URI

請求URI是統一資源識別符號,它標識要對其應用請求的資源。以下是指定URI最常用的形式:

Request-URI = "*" | absoluteURI | abs_path | authority
 
序號 方法和描述
1 星號**\* **用於HTTP請求不適用於特定資源,而是適用於伺服器本身的情況,並且僅當使用的方法不一定會應用於資源時才允許。例如:

OPTIONS \* HTTP/1.1

2 當向代理伺服器發出HTTP請求時,使用**absoluteURI**。請求代理伺服器轉發請求或從有效快取中提供服務,並返回響應。例如:

GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1

3 請求URI最常見的形式是用於標識原始伺服器或閘道器上的資源。例如,希望直接從原始伺服器檢索資源的客戶端將建立一個到主機“www.w3.org”的80埠的TCP連線,併發送以下行:

GET /pub/WWW/TheProject.html HTTP/1.1

Host: www.w3.org

請注意,絕對路徑不能為空;如果原始URI中不存在絕對路徑,則必須將其指定為“/”(伺服器根目錄)。

使用Python requests

我們將使用requests模組來學習HTTP請求。

pip install requests 

在下面的示例中,我們看到一個簡單的GET請求案例,並打印出響應的結果。我們選擇只打印前300個字元。

# How to make http request
import requests as req
r = req.get('https://tutorialspoint.tw/python/')
print(r.text)[0:300]

執行上述程式後,我們將得到以下輸出:

<!DOCTYPE html>
<!--[if IE 8]><html class="ie ie8"> <![endif]-->
<!--[if IE 9]><html class="ie ie9"> <![endif]-->
<!--[if gt IE 9]><!-->	<html> <!--<![endif]-->
<head>
<!-- Basic -->
<meta charset="utf-8">
<title>Python Tutorial</title>
<meta name="description" content="Python Tutorial
廣告