无法从python CGI发送POST请求。为什么?

2024-09-30 06:26:33 发布

您现在位置:Python中文网/ 问答频道 /正文

以下是我认为应该发送的:

POST /cgi-bin/testscript.py HTTP 1.1
Host: www.someplace.com
Content-Length: 50
Cache-Control: no-cache
Content-Type: application/x-www-form-urlencoded

bleeple=yes&rjunk=0%21603567240941&dummy=certainly

但是,如果我在STDIO上发布这个消息,apache会在我发送POST行时抱怨一个无效的头。果然,这不是头,而是前面的请求。所以,好吧,不是标题。在

显然,apache正在构造请求并为我发送它,因为如果我发送GET,像这样。。。在

^{pr2}$

…那么阿帕奇(必须!?)先发射这个。。。在

GET /cgi-bin/testscript.py HTTP 1.1

…对吗?那么,如何让它在我的头中构造以下前缀呢?在

POST /cgi-bin/testscript.py HTTP 1.1

如果我不发送post行,那么它就不知道脚本在哪里,我也看不到任何事情发生。在

如果我删除了POST行并添加了一个包含完整URL的Location:header,那么冲浪者的浏览器会转到那里,好吧,但是不会获取POST数据。在

我一直在google上搜索,直到我半瞎了,似乎找不到一个答案,如何从一个CGI发出一个适当的帖子,以回应有人从表单调用该CGI。在

当然,为了避免在浏览器中使用这个参数,我当然可以使用它:

Location: http://www.someplace.com/cgi-bin/testscript.py?bleeple=yes&rjunk=0%21603567240941&dummy=certainly

我希望在最基本的级别上执行此操作,只依赖于我的apache服务器。我可以用GET和STDIO来做。我可以发送HTTP页面,图像等,但发布?没有

我一定是错过了一些基本的东西——显然我的googlefu是最薄弱的。或者别的什么。帮忙吗?在


Tags: pycomhttpgetbinapachewwwcontent
1条回答
网友
1楼 · 发布于 2024-09-30 06:26:33

解释你想做什么是完全相关的,因为我现在理解这个问题,而我以前没有。在

正如我在评论中所说的,你把输入和输出混淆了:仅仅在响应的开头加上“POST”并不能将POST发送到另一个URL。实际上,您需要在脚本本身中生成post,例如使用stdlib或第三方requests库中的urllib模块。在

但在这一点上,你需要问问自己为什么要使用CGI。在2014年,除了极为简单的脚本之外,这真的不是一件明智的事情:我们有一种将更复杂的应用程序与web连接的适当技术,它被称为WSGI。使用Flask这样的微框架,你就可以更简单地实现你想要的:在Flask中创建一个应用程序,它将你的2、3和4脚本简单地作为函数,并将原始脚本发送给相关的脚本。这就更有意义了,因为只需要一个HTTP请求,而且都是在同一个进程中完成的。在

相关问题 更多 >

    热门问题