2010-12-06 68 views
1

我正在运行一个mod_python服务器,其中index.py旨在处理传入的请求。HTTP POST,curl和mod_python - 如何处理没有HTML FORM元素的POST请求?

在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> 

而且从这样的形式获得的详细信息(注意动作“功能”以上)

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

它从浏览器中工作得很好。我可以上传一个文件,其内容可以在服务器端检索。

但是,我想通过curl的POST发送数据。在那种情况下,我认为,<表格>元素在服务器不需要处理POST,如果我可以从请求对象本身获取POST数据。

假设通过卷曲我的要求是这样的:

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服务器不会被通过浏览器访问所有的客户端(卷曲,脚本)将发布的数据,并等待其将非HTML的响应。

回答

4

首先几点注意事项:

  • 看起来你正在使用的Publisher Handler of mod_python。这在覆盖下做了很多工作,将URL映射到Python函数。
  • 服务器并不真正知道或关心它获取数据的位置。在你的情况下,curl command is simply simulating a form POST request
  • 因此,您可以处理与表单请求完全相同的卷曲请求。
  • 您可能不想为函数“索引”命名,因为这可能会给发布者的路径 - >函数映射添加不必要的混淆,因为“index.py”是路径的隐含部分。没有错,只是混淆。

因此,对于你curl命令,你应该能够得到你想要的东西,从这个功能的 “index.py” 模块中:

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

谢谢。这一切都是必需的。我甚至可以在索引方法中做到这一点。当我在索引(req)上完成一个dir(req)时,我没有看到表单属性。我不知道mod_python req是如何奇迹般地获取表单属性的。 – 2010-12-07 09:43:36