1

私は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:接続がリセットされました。何故ですか?

4

2 に答える 2

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サーバーを作成するための非常に優れた方法ではありません!)

この種のコードを支援するために、おそらくSimpleHTTPServerから始めて、Pythonに組み込まれているさまざまな関数を調べたいと思うかもしれません。

于 2012-04-12T20:26:25.467 に答える
0

「Content-Type」フィールドとHTML5Doctypeの両方を指定することはできません。

于 2012-04-12T20:12:44.083 に答える