HTTP用Socket实现

Socket实现一个简单的Web连通

import socket

# 监听本机的IP和端口
soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
soc.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
soc.bind(('127.0.0.1', 8001))

# 让多少人等待
soc.listen(5)
while True:
    # 监听,等待链接请求---》登陆浏览器来链接me
    conn, addr = soc.accept()
    # 收到浏览器发送的消息
    buf = conn.recv(2048)
    print(buf)
    # 给浏览器返回数据
    conn.send(b'HTTP/1.1 200 OK\r\n\r\n')
    conn.send(b'Hello World!')
    #断开链接
    conn.close()

# 停止服务端程序
soc.close()

用浏览器访问本机地址和端口后会发现,终端接收到的数据如下:

b'GET / HTTP/1.1\r\n
Host: 127.0.0.1:8001\r\n
Connection: keep-alive\r\n
Cache-Control: max-age=0\r\n
sec-ch-ua: "Chromium";v="128", "Not;A=Brand";v="24", "Google Chrome";v="128"\r\n
sec-ch-ua-mobile: ?0\r\n
sec-ch-ua-platform: "macOS"\r\n
Upgrade-Insecure-Requests: 1\r\n
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7\r\n
Sec-Fetch-Site: none\r\n
Sec-Fetch-Mode: navigate\r\n
Sec-Fetch-User: ?1\r\nSec-Fetch-Dest: document\r\n
Accept-Encoding: gzip, deflate, br, zstd\r\nAccept-Language: zh-CN,zh;q=0.9\r\n
Cookie: dtable_csrftoken=Y4qI7gM1SHfEI9G2Hcbefhv2P1S8o3qM; sfcsrftoken=izGiBk8kqvNdrVH7x99qXllHiPcke63i; navRate=0.25; io=n1zZX9ykPB-4ES0XAAAD; Hm_lvt_42164aea15bef2b7bb53d4139820cac5=1722507640; HMACCOUNT=618CF0681D2B9F0F; csrftoken=9fijUMmxNItZphCWVmwlhopSHqFaqFNOXfXo6qhLeouo2YAz0t81npludlb1SfkF; Hm_lpvt_42164aea15bef2b7bb53d4139820cac5=1722594187; seafile-repo-dir-sort-by=name; seafile_view_mode=list; info_id=5_; seafile-repo-dir-sort-order=desc; sessionid=om8kds4ixgwxinvwbx4u3umkvfrtxhmi\r\n\r\n'

浏览器本质上发送请求时包含请求头和请求体

  • GET请求
    • 只有请求头 + 没有请求体
    • 请求头之间用\rln
    • 请求头和请求体之间用 \r\n\r\n
  • POST请求
    • 只有请求头 + 有请求体
    • 请求头之间用\rln
    • 请求头和请求体之间用\r\n\r\n

两个关键点:
http协议(无状态的短链接)
http的应用:浏览器向服务端发送请求,就是按照http协议来的

  • 请求头+请求体;请求头和请求体之间用\r\n\r\n;请求头之间用\r\n
  • 一次请求和一次响应后,断开链接。 —> 短链接 —> 后期在请求该如何记住? ----> 返回cookie给浏览器,浏览器下次请求携带cookie认证
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值