以下是我认为应该发送的:
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是最薄弱的。或者别的什么。帮忙吗?在
解释你想做什么是完全相关的,因为我现在理解这个问题,而我以前没有。在
正如我在评论中所说的,你把输入和输出混淆了:仅仅在响应的开头加上“POST”并不能将POST发送到另一个URL。实际上,您需要在脚本本身中生成post,例如使用stdlib或第三方
requests
库中的urllib
模块。在但在这一点上,你需要问问自己为什么要使用CGI。在2014年,除了极为简单的脚本之外,这真的不是一件明智的事情:我们有一种将更复杂的应用程序与web连接的适当技术,它被称为WSGI。使用Flask这样的微框架,你就可以更简单地实现你想要的:在Flask中创建一个应用程序,它将你的2、3和4脚本简单地作为函数,并将原始脚本发送给相关的脚本。这就更有意义了,因为只需要一个HTTP请求,而且都是在同一个进程中完成的。在
相关问题 更多 >
编程相关推荐