【问题标题】:Sending and parsing an HTTP POST request with Python使用 Python 发送和解析 HTTP POST 请求
【发布时间】: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


【解决方案1】:

您可能需要使用data 而不是params,如下所示:

import requests

url = 'http://localhost:8080/'
data = {'verify': 'true'}
response = requests.post(url, data=data)

print response.text

这会设置所有其他必要的标头,例如内容长度。

【讨论】:

    猜你喜欢
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    相关资源
    最近更新 更多