91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python?socket怎么解析HTTP請求內容

發布時間:2022-02-14 09:42:34 來源:億速云 閱讀:405 作者:iii 欄目:開發技術

本篇內容主要講解“Python socket怎么解析HTTP請求內容”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Python socket怎么解析HTTP請求內容”吧!

    socket解析HTTP請求內容

    思路

    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() 

     def get_http_content(self):
            content_length = 0
            transfer_encoding = False
            while True:
                req_line = self._file.readline()
                req_line = str(req_line, "utf-8")
     
                # 遇到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

    socket 模擬http請求

    # coding: utf-8
    import socket
    from urllib.parse import urlparse
    def get_url(url):
        url = urlparse(url)
        host = url.netloc
        path = url.path
        if path == "":
            path = "/"
        # 建立 socket 連接
        client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        client.connect((host, 80))
        client.send("GET {} HTTP/1.1\r\nHost:{}\r\nConnection:close\r\n\r\n".format(path, host).encode("utf-8"))
        data = b""
        while True:
            d = client.recv(1024)
            if d:
                data += d
            else:
                break
        data = data.decode("utf-8")
        html_data = data.split("\r\n\r\n")[1]
        print(html_data)
        client.close()
        pass
    if __name__ == '__main__':
        get_url("http://www.baidu.com")

    到此,相信大家對“Python socket怎么解析HTTP請求內容”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    博兴县| 阜平县| 通辽市| 全州县| 拜城县| 宾阳县| 炎陵县| 德惠市| 视频| 美姑县| 丽水市| 临西县| 罗田县| 扎鲁特旗| 工布江达县| 个旧市| 伊金霍洛旗| 宜君县| 临汾市| 华安县| 仙桃市| 百色市| 古蔺县| 永靖县| 宜良县| 台北县| 通海县| 鹤庆县| 慈利县| 衡东县| 大石桥市| 蚌埠市| 河东区| 班玛县| 泾阳县| 临朐县| 天峨县| 威海市| 鲜城| 太康县| 阿图什市|