在Python中获取HTTP GET变量

6 投票
2 回答
21758 浏览
提问于 2025-04-16 13:18

我正在尝试在一个Python脚本中设置一个HTTP服务器。目前我已经让服务器本身正常工作,代码大致如下,来自这里

from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer

class MyHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        print("Just received a GET request")
        self.send_response(200)
        self.send_header("Content-type", "text/html")
        self.end_headers()

        self.wfile.write('Hello world')

        return

    def log_request(self, code=None, size=None):
        print('Request')

    def log_message(self, format, *args):
        print('Message')

if __name__ == "__main__":
    try:
        server = HTTPServer(('localhost', 80), MyHandler)
        print('Started http server')
        server.serve_forever()
    except KeyboardInterrupt:
        print('^C received, shutting down server')
        server.socket.close()

不过,我需要从GET请求中获取一些变量,比如如果请求的是server.py?var1=hi,我希望Python代码能把var1放到一个Python变量中,然后进行处理(比如打印出来)。我该怎么做呢?对你们这些Python高手来说可能是个简单的问题,但对我这个Python初学者来说就不知道该怎么做了!提前谢谢你们!

2 个回答

9

导入 urlparse 模块,然后执行以下操作:

def do_GET(self):
    qs = {}
    path = self.path
    if '?' in path:
        path, tmp = path.split('?', 1)
        qs = urlparse.parse_qs(tmp)
    print path, qs
6

你可以使用 urlparse.parse_qs() 这个功能来处理网址中的查询参数。

print urlparse.parse_qs(os.environ['QUERY_STRING'])

如果你需要保持参数的顺序或者想要处理重复的参数,可以使用 urlparse.parse_qsl()

在Python 3中导入: from urllib.parse import urlparse

撰写回答