使用socket发送http请求

#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个组件

# :///;?#

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

你可能感兴趣的:(使用socket发送http请求)