【发布时间】:2013-07-15 12:23:21
【问题描述】:
谁能告诉我这个简单的服务器设置出了什么问题?它基于与this question 相同的代码,并且可能存在类似的问题 - 但我需要一个 POST 请求而不是另一个问题的最终解决方案 GET?问题是self.args 是空的,而我预期{'verify': 'true'}。
这是我的 POST 请求:
import requests
url = 'http://localhost:8080/'
data = {'verify': 'true'}
response = requests.post(url, params=data)
print response.text
以及在 localhost 上运行的处理程序:
class MyHandler(BaseHTTPRequestHandler):
def do_POST(self):
self.query_string = self.rfile.read(int(self.headers['Content-Length']))
self.args = dict(cgi.parse_qsl(self.query_string))
self.send_response(200)
self.end_headers()
self.wfile.write("Content-type: text/html<BR><BR>");
self.wfile.write("<HTML>POST OK.<BR><BR>");
def main():
server = HTTPServer(('', 8080), MyHandler)
server.serve_forever()
if __name__ == '__main__':
main()
处理程序正在输出Jamie-PC - - [15/Jul/2013 12:40:34] "POST /?verify=true HTTP/1.1" 200 -,以防万一。
【问题讨论】:
-
POST 请求(通常)不使用查询字符串来传递参数。相反,它们在请求的正文中传递。
-
谢谢。没有看到那个重复的 - 我会试着让它工作。
-
对该建议副本的接受答案几乎对我有用。我发现我需要先做
Request().prepare(),这似乎是设置content-length标头,否则将留空。 -
@JamieBull 很高兴为您工作!
标签: python post cgi python-requests httpserver