如何在python中发送http响应消息代码:400

如何在python中发送http响应消息代码:400,python,Python,我已经用python编写了一个web服务器,我想发送HTTP响应消息代码:400而不是对任何客户端请求的响应“网站即将到来!”,请告诉我如何才能做到这一点 服务器代码为: import socket import re HOST = "localhost" PORT = 13555 listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) listen_socket.setsockopt(socket.SOL_SOCKE

我已经用python编写了一个web服务器,我想发送HTTP响应消息代码:400而不是对任何客户端请求的响应“网站即将到来!”,请告诉我如何才能做到这一点

服务器代码为:

import socket
import re
HOST = "localhost"
PORT = 13555

listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
listen_socket.bind((HOST, PORT))
listen_socket.listen(1)
print ("Serving HTTP on port %s ..." % PORT)

while True:
    client_connection, client_address = listen_socket.accept()
    request = client_connection.recv(2048)
    response = "Website Coming Soon!"   #this response should be http response message code:400
    http_response = "HTTP/1.1 200 OK\n"+"Content-Type: text/html\n"+"\n"+"<html><body>"+response+"</body></html>\n"
    client_connection.sendall(http_response)
    client_connection.close()
导入套接字
进口稀土
HOST=“localhost”
端口=13555
listen\u socket=socket.socket(socket.AF\u INET,socket.SOCK\u流)
侦听\u socket.setsockopt(socket.SOL\u socket,socket.SO\u REUSEADDR,1)
侦听\u socket.bind((主机、端口))
监听插座。监听(1)
打印(“在端口%s上提供HTTP…”%port)
尽管如此:
客户端\连接,客户端\地址=侦听\套接字。接受()
请求=client_connection.recv(2048)
response=“网站即将推出!”#此响应应为http响应消息代码:400
http\u response=“http/1.1 200确定\n”+“内容类型:text/html\n”+“\n”+“+response+”\n
客户端\u连接.sendall(http\u响应)
客户端连接。关闭()

试着了解你要讲的协议:)

HTTP相当简单,所有HTTP消息由3个基本部分组成,其中第3个是可选的:

  • 请求或状态行(第一行)
  • 请求头,每一行(或一些转义分布在多行上),后跟一个额外的换行符
  • 请求主体,对于大多数请求和某些响应是可选的
您要做的是更改响应消息中的“状态行”。由于您希望发送400状态代码,因此响应的第一行应该是

HTTP/1.1 400 Bad request
但这里有两件事不对:

  • 实际上,您没有解析请求,因此无法真正告诉客户端他做错了什么(所有4xx代码都表示客户端错误)
  • 你发错了信息。可能,您想要的是类似于
    503服务不可用

  • 潜入水中。他们非常非常直截了当。如果你仔细阅读了它,并开始按照它的意图使用HTTP,世界就会变得更好一点;)

    您需要发送
    HTTP/1.1 400坏请求
    而不是
    HTTP/1.1 200 OK
    我看不出您发送内容的长度。现在我使用HTTP\u response=“HTTP/1.1 400坏请求”\n“+”内容类型:text/html\n”,但浏览器没有显示任何内容现在我使用HTTP\u response=“HTTP/1.1 400坏请求”+“内容类型:text/html\n”但是浏览器没有显示任何内容。你在标题后缺少额外的换行符。@SajalAli在提出此类问题之前,请阅读RFC2616。顺便说一句,您缺少“\r”,但RFC中清楚地记录了这一点。