我有一个函数可以生成并返回一个_GET
包含 URI 查询字段的查询键/值对的字典。假设 URI 是http://127.0.0.1/path/to/query?foo=bar&bar=foo
,该函数在派生的内部使用BaseHTTPServer.BaseHTTPRequestHandler
如下KeyError
:
class HTTPHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header("Content-Type", "text/plain")
self.end_headers()
_GET = query_parse(urlparse.urlparse(self.path).query)
# No KeyError here..
print "foo: %s\r\nbar: %s" % (GET["foo"], _GET["bar"])
# KeyError on _GET["foo"]..
self.wfile.write("foo: %s\r\nbar: %s\r\n" % (_GET["foo"], _GET["bar"]))
# Still KeyError on _GET["foo"] even if commenting above line
# and uncommenting below one!
#self.wfile.write("bar: %s\r\nfoo: %s\r\n" % (_GET["bar"], _GET["foo"]))
追溯:
localhost - - [19/Oct/2011 18:21:18] "GET /path/to/query?foo=bar&bar=foo HTTP/1.1" 200 -
localhost - - [19/Oct/2011 18:21:18] "GET /favicon.ico HTTP/1.1" 200 -
Traceback (most recent call last):
File "E:\Program\Python27\lib\SocketServer.py", line 284, in _handle_request_noblock
self.process_request(request, client_address)
File "E:\Program\Python27\lib\SocketServer.py", line 310, in process_request
self.finish_request(request, client_address)
File "E:\Program\Python27\lib\SocketServer.py", line 323, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "E:\Program\Python27\lib\SocketServer.py", line 639, in __init__
self.handle()
File "E:\Program\Python27\lib\BaseHTTPServer.py", line 337, in handle
self.handle_one_request()
File "E:\Program\Python27\lib\BaseHTTPServer.py", line 325, in handle_one_request
method()
File "http-test.py", line 40, in do_GET
print "foo: %s" % _GET["foo"]
KeyError: 'foo'