61

BaseHTTPServer プログラムを作成しようとしています。Python 3.3 または 3.2 を使用することを好みます。何をインポートするかについてドキュメントを理解するのは難しいと思いますが、インポートを次のように変更しようとしました:

from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer

に:

from http.server import BaseHTTPRequestHandler,HTTPServer

その後、インポートが機能し、プログラムが起動して GET 要求を待ちます。しかし、リクエストが到着すると例外が発生します:

File "C:\Python33\lib\socket.py", line 317, in write return self._sock.send(b)
TypeError: 'str' does not support the buffer interface

質問: Python3.x ですぐに使用できる BaseHTTPServer または http.server のバージョンはありますか、それとも何か間違っていますか?

これは、Python 3.3 および 3.2 で実行しようとした「私の」プログラムです。

#!/usr/bin/python
# from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer
from http.server import BaseHTTPRequestHandler,HTTPServer

PORT_NUMBER = 8080

# This class will handle any incoming request from
# a browser 
class myHandler(BaseHTTPRequestHandler):

    # Handler for the GET requests
    def do_GET(self):
        print   ('Get request received')
        self.send_response(200)
        self.send_header('Content-type','text/html')
        self.end_headers()
        # Send the html message
        self.wfile.write("Hello World !")
        return

try:
    # Create a web server and define the handler to manage the
    # incoming request
    server = HTTPServer(('', PORT_NUMBER), myHandler)
    print ('Started httpserver on port ' , PORT_NUMBER)

    # Wait forever for incoming http requests
    server.serve_forever()

except KeyboardInterrupt:
    print ('^C received, shutting down the web server')
    server.socket.close()

プログラムは部分的に Python2.7 で動作しますが、2 ~ 8 回のリクエスト後にこの例外が発生します。

error: [Errno 10054] An existing connection was forcibly closed by the remote host
4

4 に答える 4

7

あなたはそのようにすることができます:

self.send_header('Content-type','text/html'.encode())
self.end_headers()
# Send the html message
self.wfile.write("Hello World !".encode())
于 2016-02-06T13:29:27.243 に答える
4

http.server の python 3 ドキュメントを作成した人は誰でも、変更に気付きませんでした。2.7 のドキュメントの一番上に、「Python 3 では、BaseHTTPServer モジュールが http.server にマージされました。2to3 ツールは、ソースを Python 3 に変換するときにインポートを自動的に適応させます。」と述べています。

于 2014-07-27T18:17:28.800 に答える