首页 热点资讯 义务教育 高等教育 出国留学 考研考公

如何用同一个socket连接,发送多次http请求

发布网友 发布时间:2022-04-22 06:07

我来回答

1个回答

热心网友 时间:2023-07-08 01:26

#python 3.X

# requests  -->urllib -->socket

#导入socket 模块

import socket

#导入url解析的模块

from urllib.parseimport urlparse

#通过socket发送http 请求

def get_url(url):

#解析url ,获取host 及uri

    url = urlparse(url)

#将URL解析为6个组件

# <scheme>://<netloc>/<path>;<params>?<query>#<fragment>

    host =url.netloc

    path =url.path

    print(host,path)

#如请求资源为空,则设置为/

    if path =="":

        path ="/"

    #建立socket 客户端连接

    client = socket.socket()

    client.connect((host, 80))

#发送请求信息 \r\n win 的换行回车   可以fiddler抓包 看看http请求行的格式。

python 3.X 发送的网络包,都是字节,所以,发送的信息,必须编码。

    client.send("GET {} HTTP/1.1\r\nHost: {} \r\nConnection:close\r\n\r\n".format( path , host ).encode("utf-8"))

#3.x 网络传输的数据都是字节。必须以字节接收。如果想打印字符串,必须解码。

    data =b""

    #while 循环接收请求响应的数据。

    while True:

d = client.recv(1024)#每次接收1024个字节

        if d:#如果接收数据不为空,则拼接

            data += d

print(1)

else:#否则,不再接收数据则跳出循环。

            break

    #print(data.decode())

#把数据解码 (包含响应头 + 响应体【通过浏览器渲染显示在网页中的内容】)

    data = data.decode()

#取出响应体

    html_data = data.split("\r\n\r\n")[1]

print(html_data)

#关闭客户端链接

    client.close()

if __name__ =="__main__":

get_url("http://www.baidu.com")

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com