首页 > 其他分享 >如何判断HTTP请求结束

如何判断HTTP请求结束

时间:2024-05-07 17:23:05浏览次数:17  
标签:判断 WebSocket 请求 AF HTTPSocket print HTTP socket

如何判断HTTP请求结束

如果按下面这样写的话,在浏览器中访问12000端口,可能会显示出"Hellow World!",但浏览器实际一直处于连接状态,在edge中状态栏会显示叉号,可以手动关闭连接。

from socket import socket, AF_INET, SOCK_STREAM, SOL_SOCKET, SO_REUSEADDR

HTTPResponse ='HTTP/1.1 200 OK\r\n\r\n<html>Hello World!</html>'

WebSocket = socket(AF_INET, SOCK_STREAM)
WebSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
WebSocket.bind(('localhost', 12000))
WebSocket.listen(1)

HTTPSocket, addr = WebSocket.accept()  # Wait Connection
while True:
  print('Waiting HTTP Request...')
  Request = HTTPSocket.recv(1024)
  
  print('Send HTTP Response!')
  HTTPSocket.sendall(HTTPResponse.encode('utf-8'))  # Send 

可以使用的方法有:

  1. Content-Length 指明了请求体的长度,可以直接读取指定长度的数据
from socket import socket, AF_INET, SOCK_STREAM, SOL_SOCKET, SO_REUSEADDR

HTTPResponse ='HTTP/1.1 200 OK\r\nContent-Length: 25\r\n\r\n<html>Hello World!</html>'

WebSocket = socket(AF_INET, SOCK_STREAM)
WebSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
WebSocket.bind(('localhost', 12000))
WebSocket.listen(1)

HTTPSocket, addr = WebSocket.accept()
while True:
  print('Waiting HTTP Request...')
  Request = HTTPSocket.recv(1024)
  
  print('Send HTTP Response!')
  HTTPSocket.send(HTTPResponse.encode('utf-8'))
  1. Transfer-Encoding: chunked 数据要求为分块传输,格式为n\r\n数据\r\n,n为数据长度,n为0表示结束
from socket import socket, AF_INET, SOCK_STREAM, SOL_SOCKET, SO_REUSEADDR

HTTPResponse = 'HTTP/1.1 200 OK\r\nTransfer-Encoding: chunked\r\n\r\n'

WebSocket = socket(AF_INET, SOCK_STREAM)
WebSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
WebSocket.bind(('localhost', 12000))
WebSocket.listen(1)

HTTPSocket, addr = WebSocket.accept()
while True:
  print('Waiting HTTP Request...')
  Request = HTTPSocket.recv(1024)
  
  print('Send HTTP Response!')
  HTTPSocket.send(HTTPResponse.encode('utf-8'))
  
  HTTPSocket.send('5\r\nHello\r\n'.encode('utf-8'))
  HTTPSocket.send('0\r\n\r\n'.encode('utf-8'))
  1. Connection: close 请求结束后关闭连接
from socket import socket, AF_INET, SOCK_STREAM, SOL_SOCKET, SO_REUSEADDR

HTTPResponse ='HTTP/1.1 200 OK\r\n\r\n<html>Hello World!</html>'

WebSocket = socket(AF_INET, SOCK_STREAM)
WebSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
WebSocket.bind(('localhost', 12000))
WebSocket.listen(1)

while True:
  print('Waiting HTTP Request...')
  HTTPSocket, addr = WebSocket.accept()
  Request = HTTPSocket.recv(1024)
  
  print('Send HTTP Response!')
  HTTPSocket.send(HTTPResponse.encode('utf-8'))
  
  HTTPSocket.close()

标签:判断,WebSocket,请求,AF,HTTPSocket,print,HTTP,socket
From: https://www.cnblogs.com/wangerblog/p/18177842

相关文章

  • ITIL4 视角下的请求管理:优化服务体验的现代实践
    在当今复杂的IT服务管理环境中,请求管理作为ITIL4框架中的一个重要实践,扮演着连接用户需求与高效服务交付的桥梁角色。请求管理主要处理那些非即时性、变更或事件驱动的用户需求,比如密码重置、软件安装、访问权限调整等。由于请求通常是工单系统中最频繁的服务类型,优化请求管理......
  • toapi:抓取任意网页内容并提供 HTTP API获取数据
    Github地址:https://github.com/elliotgao2/toapiPythonToapi是一个基于XPath和CSS选择器的WebAPI框架,它能够快速将网页内容转换为结构化的API。Toapi提供了简单易用的接口,使得开发者可以轻松地从网页中提取数据,并以API的形式呈现出来。同时,Toapi支持自定义规则和过......
  • chinesecalendar:判断日期是不是工作日
    工作与学习中,有个场景需要判断指定日期是不是工作日,例如自动化办公工作日自动发邮件,量化交易判断是否为交易日等等,因此我们需要能准确判断给的日期是不是工作日,Python中一般使用模块chinesecalendar来解决这个问题。网友自己维护fromdatetimeimportdatetime#休:正常工作日......
  • Springboot+Netty实现http和ws统一端口处理
    http:/localhost:8080/apiws:/localhost:8080/ws核心就是两个channel处理器,http和wswebsocketpackagecom.example.netty;importio.netty.channel.ChannelHandlerContext;importio.netty.channel.SimpleChannelInboundHandler;importio.netty.handler.codec.http.HttpH......
  • GRPC与HTTP/3.0
    弱网环境下的表现不同GRPC是基于HTTP/2.0协议开发的,HTTP/2.0通过以下举措在性能方面有极大的提升:引出了Stream概念,多个Stream可以复用在一条TCP连接,解决了HTTP/1.1的队头阻塞问题(在一条TCP连接上服务端对多个请求的响应只能一个一个同步的响应,即使多个请求是并发的)开发了......
  • 动态判断两个时间的时间间隔--时分秒
    <!--div--><view>{{countRunTime(fromTime,toTime,'hh时mm分')"}}</view><!--script-->countRunTime(date1,date2,pattern){//date1开始时间,date2结束时间,pattern显示格式(这里只需要显示经时时分秒格式)letstartTime=newDate(date1......
  • Java发送HTTP GET/POST请求
    一、Java11HttpClient在Java11的java.net.http.*包中,有一个HttpClient类可以完成HTTP请求。Java11HttpClientExample.javapackagecom.lyl.http;importjava.net.URI;importjava.net.URLEncoder;importjava.net.http.HttpClient;importjava.net.http.HttpRequest;im......
  • Python模块request去掉headers里请求content-length
    前言全局说明Python模块request去掉headers里请求content-length一、说明当request请求data有参数时,会自动计算长度,并增加content-length值,但有些服务器不接收这样的参数就可能会报错。二、网上方法:2.1requests去掉headers里的content-length来源:https://blog......
  • 顺序栈实现进制转换 和 通过键盘输入一个包括 '(' 和 ')' 的字符串string ,判断字符串
    /********************************************************************************************************** filename: Zqh_栈实现.c* author : [email protected]* date : 2024/05/05* function: 顺序栈实现进制转换和通过键盘输入一个包括'('和')'......
  • Axios-POST 请求
    Axios是一个基于 promise 网络请求库,作用于node.js 和浏览器中。它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生node.js http 模块,而在客户端(浏览端)则使用XMLHttpRequests。发起一个 POST 请求axios.post('/user',{......