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

时间:2015-06-01 21:09:34

标签: 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_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()

1 个答案:

答案 0 :(得分:1)

尝试了解您想要说的协议:)

HTTP非常简单,所有HTTP消息都包含3个基本部分,其中第3部分是可选的:

  • 请求或状态行(第一行)
  • 请求标头,每个都在一行上(或者有一些转义遍历多个),后跟一个额外的换行符
  • 请求正文,对于大多数请求和某些回复都是可选的。

您要做的是更改回复消息中的“状态行”。由于您要发送400状态代码,因此响应中的第一行应为

HTTP/1.1 400 Bad request

但这里有两件事是错的:

  1. 你实际上并没有解析请求,所以你无法告诉客户他做错了什么(所有4xx代码代表客户端错误
  2. 您发送错误信息。也许,你想要的是503 Service unavailable
  3. 潜入specs。他们真的真的直截了当。如果你仔细阅读,并按照预期的方式开始讲HTTP,世界会变得更好一些;)