socket怎么模拟发送http请求

发布时间:2021-08-03 17:40:42 作者:chen
来源:亿速云 阅读:593

本篇内容介绍了“socket怎么模拟发送http请求”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!


socket模拟发送http请求

大家都知道,osi有七层模型,但是我们的TCP/IP协议其实并不是完全符合这个模型的。但是有些东西两者都具有的,我们这里简要说一下传输层和应用层。

socket怎么模拟发送http请求

我们知道这个传输层是TCP和UTP协议,应用层则是我们经常使用的HTTP、SMTP、FTP等协议。应用层的那些协议都是基于传输层协议来的,都是为了实现特定的功能而进行封装的。那么大家就要问了,这个socket是什么,在哪里呢?往下看:

socket怎么模拟发送http请求

原来在这里啊,Socket它是应用层与传输层(TCP/IP协议族)通信的中间软件抽象层,我们可以认为它是一组接口(api)。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。我们可以利用Socket来模拟HTTP请求,从而实现伪HTTP协议的目的。


我们以get方式来请求百度首页为例,利用Socket来模拟发送HTTP请求。

我们可以直接仿照浏览器的请求头部信息去发送请求,当然也可以通过urllib提供的urlparse方法来对url进行修改,然后通过传递参数的方式来发送信息,相关的代码如下:


# /usr/bin/python
# -*- coding:utf-8 -*-
# @author: Envse
# @file: socket_http.py
# @time: 2018/10/03 16:06


# requests -->urllib -->socket
import socket
from urllib.parse import urlparse


def get_url(url):
    # 通过socket请求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('utf8'))# 相对路径
    data = b""
    while True:
        d = client.recv(1024)
        if d:
            data += d
        else:
            break

    data = data.decode('utf8')
    html_data = data.split("\r\n\r\n")[1]
    print(html_data)
    client.close()


if __name__ == '__main__':
    get_url("http://www.baidu.com/")


这段代码其实很好理解,就是模拟客户端向服务器发送请求。首先通过get_url方法来将我们需要模拟的url进行处理,然后建立socket连接,发送内容,最后接收响应内容并将其进行输出,关闭连接,是不是很简单呢。运行结果:

socket怎么模拟发送http请求

再来看看通过浏览器查看的百度首页的源码,是不是差不多:


socket怎么模拟发送http请求

“socket怎么模拟发送http请求”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

推荐阅读:
  1. 使用Requests发送Http请求
  2. springboot发送http请求

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

http socket

上一篇:k3s怎么快速搭建k8s集群环境

下一篇:如何解决某些HTML字符打不出来的问题

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》