2015-06-01 104 views
1

我已經寫了一個Python服務器,我想發送HTTP響應消息代碼:400而不是響應「網站即將推出!根據客戶的要求,請告訴我該怎麼做。如何發送HTTP響應消息代碼:400在Python中

服務器代碼是:

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() 
+0

你需要發送'HTTP/1.1 400 Bad Request'而不是'HTTP/1.1 200 OK'我沒有看到你發送內容的時間。 –

+0

現在我正在使用http_response =「HTTP/1.1 400錯誤的請求\ n」+「Content-Type:text/html \ n」但瀏覽器沒有顯示任何內容 –

回答

1

嘗試去了解你想說話:)

HTTP是相當簡單的協議,所有的HTTP報文由3個基本部分,其中第三是可選的:

  • 的請求或狀態行(第一行)
  • 的請求標題,每一行在一行中(或者有一些行轉義多次),然後是一個額外的換行
  • 請求正文,對大多數請求和一些響應是可選的。

你想要做的是在響應消息中改變「狀態行」。既然你要發送的400狀態碼,在回信中第一行應該是

HTTP/1.1 400 Bad request 

但有兩件事情錯在這裏:

  1. 其實你不解析請求,這樣你就可以不是真的告訴客戶他做錯了什麼(所有4xx代碼代表客戶端錯誤
  2. 您發送了錯誤信息。可能,你想要的東西就像503 Service unavailable

潛入specs。他們真的真的直截了當。如果你仔細閱讀,然後開始按照它的意圖來說HTTP,世界會變得更好一點;)

+0

現在我正在使用 http_response =「HTTP/1.1 400 Bad請求\ n「+」內容類型:文本/ html \ n「 但瀏覽器不顯示 –

+0

您錯過了標題後面的額外換行符。 –

+0

哪裏?請糾正它,並在這裏發表評論 –

相關問題