HTTP POST,curl和mod_python - 如何在没有HTML FORM元素的情况下处理POST请求?

时间:2010-12-06 08:43:48

标签: python http-post mod-python

我正在运行一个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发送数据。在那种情况下,我想,&lt; form&gt;如果我可以从请求对象本身获取POST数据,则不需要服务器上的元素来处理POST。

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

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

我应该如何设计我的mod_python请求处理程序,以便获取我发布的数据。 我应该使用&lt; form&gt;什么?

def index(req):
    # What should I do here to get data_i_am_posting
顺便说一下,请注意我的HTTP服务器根本不会被浏览器访问,客户端(curl,脚本)将发布数据并等待非html的响应。

1 个答案:

答案 0 :(得分:4)

首先注意几点:

  • 看起来您正在使用Publisher Handler of mod_python。这有很多内容可以将URL映射到Python函数。
  • 服务器并不真正了解或关心其获取数据的位置。在您的情况下,curl command is simply simulating a form POST request
  • 因此,您可以处理与表单请求完全相同的curl请求。
  • 您可能不希望将您的函数命名为“index”,因为这可能会给发布者的路径&gt;函数映射带来不必要的混淆,因为“index.py”是路径的隐含部分。没错,只是令人困惑。

因此,对于curl命令,您应该能够在“index.py”模块中从此函数中获得所需内容:

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