【问题标题】:HTTP POST, curl and mod_python - How to handle POST request without HTML FORM element?HTTP POST、curl 和 mod_python - 如何在没有 HTML FORM 元素的情况下处理 POST 请求?
【发布时间】:2010-12-06 08:43:48
【问题描述】:

我正在运行一个 mod_python 服务器,其中 index.py 旨在处理传入的请求。

在 index.py 中,如果我设计这样的东西来处理表单并获取表单中的详细信息:

<form enctype="multipart/form-data" action="func" method="post">
<p>Input file:<input type="file" name="request"></p>
<p><input type="submit" name="press" value="submit"></p>

并从这样的表单中获取详细信息(注意上面的操作“func”)

def func(req):
    message = []
    f = req.form.getfirst('request')

它在浏览器中运行良好。我可以上传一个文件,它的内容可以在服务器端检索。

但是,我想通过 curl 的 POST 发送数据。在这种情况下,我认为,如果我可以从请求对象本身获取 POST 数据,则服务器上的

元素不需要处理 POST。

假设我通过 curl 的请求是这样的:

curl --data "request=data_i_am_posting" http://mymodpythonsite.com/path/

应该如何设计我的 mod_python 请求处理程序,以便获得我发布的数据。 我应该使用

吗?
def index(req):
    # What should I do here to get data_i_am_posting

顺便说一句,请注意我的HTTP服务器根本不会被浏览器访问,客户端(curl,脚本)将发布数据并等待非html的响应。

【问题讨论】:

    标签: python http-post mod-python


    【解决方案1】:

    首先要注意几点:

    • 您似乎正在使用Publisher Handler of mod_python。这在将 URL 映射到 Python 函数方面做了很多工作。
    • 服务器并不真正知道或关心它从何处获取数据。在您的情况下,curl command is simply simulating a form POST request
    • 因此,您可以像处理表单请求一样处理 curl 请求。
    • 您可能不想将函数命名为“index”,因为这可能会给发布者的路径->函数映射增加不必要的混淆,因为“index.py”是路径的隐含部分。没有错,只是令人困惑。

    所以对于你的 curl 命令,你应该能够从“index.py”模块中的这个函数中得到你想要的:

    def path(req):
        request_data = req.form.getfirst('request')
    
      -

    【讨论】:

    • 谢谢。这就是所有需要的。我什至可以在 index 方法中做到这一点。当我最初在 index(req) 上完成 dir(req) 时,我没有看到表单属性。我不确定 mod_python req 是如何神奇地获取表单属性的。
    • 我还面临另一个问题。当我执行 curl --data "request=" mymodpythonsite.com/path 时,服务器将其视为无效的 xml,例如: value=something (尝试过——数据,--data-binary,--data-urlencode,无济于事)
    • 没有什么能立刻让我眼前一亮。虽然这似乎是另一个 SO 问题的机会:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-26
    • 2017-09-15
    • 2015-05-13
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    相关资源
    最近更新 更多