使用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个组件

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • https://nodejs.org/api/documentation.html 工具模块 Assert 测试 ...
    KeKeMars阅读 6,403评论 0 6
  • 网络编程 一.楔子 你现在已经学会了写python代码,假如你写了两个python文件a.py和b.py,分别去运...
    go以恒阅读 2,097评论 0 6
  • 浏览器访问服务器的过程、HTTP协议、开发者工具、HTTP请求报文协议分析、HTTP响应报文协议分析、长连接和短连...
    Cestine阅读 1,209评论 0 3
  • 网络 理论模型,分为七层物理层数据链路层传输层会话层表示层应用层 实际应用,分为四层链路层网络层传输层应用层 IP...
    FlyingLittlePG阅读 815评论 0 0
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,819评论 0 10