0

ブラウザで「Hello World !('192.168.0.162', 48344)bob」を返したい次のスクリプトをまとめました。

server:8081/?first_name=bob

ただし、次のプログラムを実行すると、Hello World !('192.168.0.162', 48344)None が返されます

#!/usr/bin/python
from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer
import cgi, cgitb
x = "1"
PORT_NUMBER = 8081
cgitb.enable()

#This class will handles any incoming request from
#the browser 
class myHandler(BaseHTTPRequestHandler):

    #Handler for the GET requests
    def do_GET(self):
        form = cgi.FieldStorage() 
        first_name = form.getvalue('first_name')
        self.send_response(200)
        self.send_header('Content-type','text/html')
        self.end_headers()
        # Send the html message
        self.wfile.write("Hello World !")
        self.wfile.write(self.client_address)
        self.wfile.write(first_name)
        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 htto requests
    server.serve_forever()

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

なにが問題ですか?

4

1 に答える 1

1

問題はcgi.FieldStorage()、CGI スクリプトでの使用を意図したものを使用することです。メソッドでクエリ文字列を自分で解析する必要がありますdo_GET()。モジュールの特定の部分を使用cgiしてそれを行うことができます (おそらくdo_POST()ハンドラーでの最良のアプローチ) がdo_GET()、より一般的なアプローチは次のようなものです。

import urlparse

class myHandler(BaseHTTPRequestHandler):

    #Handler for the GET requests
    def do_GET(self):
        o = urlparse.urlparse(self.path)
        form = urlparse.parse_qs(o.query)

urlparse.urlparseを参照してください。

urlparse.parse_qsを参照してください。

于 2014-02-17T01:57:03.310 に答える