[英]Why does my HTTP response using Python Sockets fail?
碼:
from socket import *
sP = 14000
servSock = socket(AF_INET,SOCK_STREAM)
servSock.bind(('',sP))
servSock.listen(1)
while 1:
connSock, addr = servSock.accept()
connSock.send('HTTP/1.0 200 OK\nContent-Type:text/html\nConnection:close\n<html>...</html>')
connSock.close()
當我進入瀏覽器並輸入localhost:14000時,出現錯誤101- ERR_CONNECTION_RESET連接被重置了? 不知道為什么! 我究竟做錯了什么
幾個錯誤,有些比其他錯誤更嚴重......正如@IanWetherbee已經注意到的那樣,你需要在身體前面留空線。 你也應該發送\\ r \\ n而不僅僅是\\ n。 您應該使用sendall
來避免短發。 最后,您需要在完成發送后關閉連接。
這是上面的略微修改版本:
from socket import *
sP = 14000
servSock = socket(AF_INET,SOCK_STREAM)
servSock.bind(('',sP))
servSock.listen(1)
while 1:
connSock, addr = servSock.accept()
connSock.sendall('HTTP/1.0 200 OK\r\nContent-Type:text/html\r\nConnection:close\r\n\r\n<html><head>foo</head></html>\r\n')
connSock.close()
運行你的代碼,我有類似的錯誤,也不確定它們的起源。 但是,您是否考慮過內置的HTTP服務器,而不是滾動自己的HTTP服務器? 看看下面的示例。 這也可以支持POST(必須添加do_POST方法)。
簡單的HTTP服務器
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
class customHTTPServer(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
self.wfile.write('<HTML><body>Hello World!</body></HTML>')
return
def main():
try:
server = HTTPServer(('',14000),customHTTPServer)
print 'server started at port 14000'
server.serve_forever()
except KeyboardInterrupt:
server.socket.close()
if __name__=='__main__':
main()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.