Python socket解析HTTP請求內容

2021-09-26 14:25:42 字數 1661 閱讀 9271

1. 解析http請求的頭部

http請求頭部的結束符行為"\r\n",可以按行讀取http請求頭的內容,如果讀到一行為"\r\n",說明http請求頭結束。

2. 請求頭裡面含有content-length引數

如果http請求裡面有content-length引數,說明http請求的內容大小是確定的,請求直接讀取content-length的值,然後讀取相應位元組的的內容即可。

3.請求頭裡面含有transfer-encoding: chunked 引數

如果http請求裡面有transfer-encoding引數,說明http請求的內容大小是不確定的,這種內容的結束符是"0\r\n\r\n",因此可以按行讀取http請求的內容部分,如果連續讀到"0\r\n"和"\r\n"說明內容讀取完畢。

**中: self._file 代表的是socket.makefile()

# 遇到http頭結束符

# 讀取http內容

if req_line == "\r\n":

if content_length != 0:

content = self._file.read(content_length)

content = str(content, "utf-8")

self._content = content

return none

if transfer_encoding:

content = ""

self._file.readline()

while true:

line = self._file.readline()

line = str(line, "utf-8")

if line == "0\r\n":

sub_line = self._file.readline()

sub_line = str(sub_line, "utf-8")

if sub_line == "\r\n":

self._content = content

return none

else:

content += line

continue

self._content = false

# 標頭檔案沒有結束

# 並且沒有找到關於內容大小的字段

else:

if content_length == 0 and transfer_encoding is false:

words = req_line.split()

if words[0] == "content-length:":

content_length = int(words[1])

if words[0] == "transfer-encoding:":

transfer_encoding = true

self._content = false

使用HtmlAgilityPack解析html

使用方式htmldocument html new htmldocument 建立htmldocument物件 html.loadhtml html 載入html頁面內容 html為string htmlnode htmlnode html.documentnode 獲取當前頁面的節點 htmlno...

Python Socket 程式設計

client import socket,sys if name main 處理引數 argv sys.argv if len argv 3 or len argv 2 and argv 1 print useage argv 0 sys.exit 0 host argv 1 server ip位址...

python socket程式設計

python 編寫server的步驟 1.第一步是建立socket物件。呼叫socket建構函式。如 socket socket.socket family,type family引數代表位址家族,可為af inet或af unix。af inet家族包括internet位址,af unix家族用於...