如何在python中发送http响应消息代码:400
Posted
技术标签:
【中文标题】如何在python中发送http响应消息代码:400【英文标题】:how to send http response message code:400 in python 【发布时间】:2015-06-01 21:09:33 【问题描述】:我用 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()
【问题讨论】:
您需要发送HTTP/1.1 400 Bad Request
而不是HTTP/1.1 200 OK
我看不到您发送内容长度的位置。
现在我正在使用 http_response = "HTTP/1.1 400 Bad request\n"+"Content-Type: text/html\n" 但浏览器没有显示任何内容
【参考方案1】:
尝试了解您要说的协议:)
HTTP 相当简单,所有 HTTP 消息都由 3 个基本部分组成,其中第 3 个是可选的:
请求或状态行(第一行) 请求标头,每个位于一行(或一些转义分布在多行),后跟一个额外的换行符 请求正文,对于大多数请求和某些响应是可选的。您要做的是更改响应消息中的“状态行”。由于您要发送 400 状态代码,因此响应中的第一行应该是
HTTP/1.1 400 Bad request
但是这里有两点不对:
-
您实际上并没有解析请求,因此您无法真正告诉客户端他做错了什么(所有 4xx 代码代表客户端错误)
您发送了错误的信息。可能你想要的是
503 Service unavailable
深入了解specs。他们是真的,真的直截了当。如果你仔细阅读它,并按照预期的方式开始使用 HTTP,世界会变得更好;)
【讨论】:
现在我正在使用 http_response = "HTTP/1.1 400 Bad request\n"+"Content-Type: text/html\n" 但浏览器没有显示任何内容 您在标题后缺少额外的换行符。 @SajalAli 请在提出此类问题之前阅读 RFC 2616。顺便说一句,您缺少“\r”,但这在 RFC 中有明确记录。以上是关于如何在python中发送http响应消息代码:400的主要内容,如果未能解决你的问题,请参考以下文章
如何仅使用套接字库通过 Python 正确发送 HTTP 响应?
如何让我的机器人获取已经从频道中的用户发送的随机消息,并在触发自动响应时发送该随机消息