HTTP POST、curl 和 mod_python - 如何处理没有 HTML FORM 元素的 POST 请求?

1 投票
1 回答
4267 浏览
提问于 2025-04-16 08:06

我正在运行一个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方式发送数据。在这种情况下,我认为服务器上的<form>元素并不是必须的,因为我可以直接从请求对象中获取POST数据。

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

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

那么我的mod_python请求处理器应该怎么设计,才能获取到我发送的数据呢?我还需要使用<form>吗?

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

顺便提一下,请注意我的HTTP服务器根本不会被浏览器访问,客户端(curl、脚本)会发送数据并等待响应,而这个响应不会是HTML格式的。

1 个回答

4

首先,有几点需要说明:

  • 看起来你正在使用 mod_python的发布处理器。这个工具在后台做了很多工作,把网址映射到Python函数上。
  • 服务器其实并不在乎它的数据来自哪里。在你的例子中,curl命令只是模拟了一个表单的POST请求
  • 因此,你可以像处理表单请求一样处理curl请求。
  • 你可能不想把你的函数命名为“index”,因为这可能会让发布者在路径和函数的映射上产生不必要的混淆,因为“index.py”是路径中隐含的一部分。这样做并没有错,只是会让人困惑。

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

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

撰写回答