我正在尝试使用Python实现一个非常基本的类似Web服务器的应用程序,这是我目前的代码:
from socket import *
serverPort = 12000
serverSocket = socket(AF_INET,SOCK_STREAM)
serverSocket.bind(('', serverPort))
serverSocket.listen(1)
print 'Server is now running...'
while 1:
connectionSocket, addr = serverSocket.accept()
connectionSocket.sendall('''
HTTP/1.0 200 OK\r\n
Content-Type:text/html\r\n
Connection:close\r\n
\r\n
<!DOCTYPE html>
<head><title>Lab sign-up - AntonX Server</title></head>
<h1>Lab Sign-up</h1>
<table>
<form action=\"localhost:12000\" method=\"GET\">
<tr><td>Time</td><td>Name</td></tr>
<tr><td>1 PM</td><td><input type=\"text\" name=\"time_1\"></td></tr>
<tr><td>2 PM</td><td><input type=\"text\" name=\"time_2\"></td></tr>
<tr><td>3 PM</td><td><input type=\"text\" name=\"time_3\"></td></tr>
<tr><td>4 PM</td><td><input type=\"text\" name=\"time_4\"></td></tr>
<tr><td>5 PM</td><td><input type=\"text\" name=\"time_5\"></td></tr>
<tr><td colspan=\"2\"><input type=\"submit\" name=\"submit\" value=\"Steal this spot!\"></tr>
</form></table>
</html>\r\n
''')
connectionSocket.close()
问题是......当我导航到localhost:12000时,出现错误101:连接已重置。那是为什么?
答案 0 :(得分:2)
您要发回的数据有很多额外的空格和换行符。 例如,
'''
HTTP/1.0 200 OK\r\n
Content-Type:text/html\r\n'''
将发送字符串
(blank line)
(extra spaces) HTTP/1.0 200 OK
(blank line)
(extra spaces) Content-Type:text/html
换句话说,您将获得已明确包含在\ r \ n中的新行以及源代码中自然包含的换行符。
此代码适用于我的网络浏览器。
from socket import *
serverPort = 12000
serverSocket = socket(AF_INET,SOCK_STREAM)
serverSocket.bind(('', serverPort))
serverSocket.listen(1)
print 'Server is now running...'
while 1:
connectionSocket, addr = serverSocket.accept()
connectionSocket.sendall("HTTP/1.0 200 OK\r\n"+
"Content-Type: text/html\r\n"+
"Connection: close\r\n"+
"\r\n"+
"""<!DOCTYPE html>
<head><title>Lab sign-up - AntonX Server</title></head>
<h1>Lab Sign-up</h1>
<table>
<form action=\"localhost:12000\" method=\"GET\">
<tr><td>Time</td><td>Name</td></tr>
<tr><td>1 PM</td><td><input type=\"text\" name=\"time_1\"></td></tr>
<tr><td>2 PM</td><td><input type=\"text\" name=\"time_2\"></td></tr>
<tr><td>3 PM</td><td><input type=\"text\" name=\"time_3\"></td></tr>
<tr><td>4 PM</td><td><input type=\"text\" name=\"time_4\"></td></tr>
<tr><td>5 PM</td><td><input type=\"text\" name=\"time_5\"></td></tr>
<tr><td colspan=\"2\"><input type=\"submit\" name=\"submit\" value=\"Steal this spot!\"></tr>
</form></table>
</html>\r\n
""")
connectionSocket.close()
(但是,这不是用Python编写Web服务器的好方法!)
您可能希望查看Python中的各种内置函数来帮助处理这种代码,可能从SimpleHTTPServer开始。
答案 1 :(得分:0)
您无法同时指定“内容类型”字段和HTML5文档类型。