HTTP POST、curl 和 mod_python - 如何处理没有 HTML FORM 元素的 POST 请求?
我正在运行一个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')
-
-