簡體   English   中英

無法從python CGI發送POST請求。 為什么?

[英]Can't send POST request from python CGI. Why?

我認為應該發送以下內容:

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上,當我發送POST行時,apache會抱怨報頭無效。 可以肯定的是,它不是標題,而是前面的請求。 好吧,不是標題。

顯然,apache正在構造該請求並將其發送給我,因為如果我發送GET,就像這樣...

Location: http://www.someplace.com/cgi-bin/testscript.py?foo=bar

...然后apache(必須!?)首先發出此信號...

GET /cgi-bin/testscript.py HTTP 1.1

...對? 那么,如何使它在標頭中構造以下前綴呢?

POST /cgi-bin/testscript.py HTTP 1.1

如果我發送帖子行,那么它將不知道腳本在哪里,並且什么也看不到。

如果我刪除POST行並添加具有完整URL的Location:標頭,那么沖浪者的瀏覽器會轉到那里,很好,但是沒有拾取POST數據。

我一直在谷歌上搜索,直到我半盲,似乎無法找到答案如何從CGI發出適當的POST以響應某人從表單調用該CGI的問題。

當然,此(GET)可以正常工作,只不過它在瀏覽器的URL欄中公開了參數,而我試圖避免這種情況:

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

我想在最基本的級別上執行此操作,這取決於我的apache服務器。 我可以用GET和STDIO做到這一點。 我可以發送HTTP頁面,圖像等。但是POST? 沒有。

我必須缺少一些基本知識-顯然我的google-fu最弱。 或者其他的東西。 救命?

就我現在所理解的問題而言,解釋您要做什么是完全相關的,而我以前沒有。

正如我在評論中所說,您將輸入與輸出混淆:僅在響應的開頭放置“ POST”就不會以某種方式發布到另一個URL。 您實際上需要從腳本本身內部進行發布,例如,使用stdlib或第三方requests庫中的urllib模塊。

但是,此時您需要問自己為什么要使用CGI。 除了極簡單的腳本之外,2014年對於其他任何事情而言,這確實不是明智的選擇:我們擁有一種適當的技術,可以將更復雜的應用程序與Web接口,這就是WSGI。 使用像Flask這樣的微型框架,然后您可以更輕松地實現所需的目標:在Flask中輕松啟動一個應用程序,該應用程序將您的2、3和4個腳本簡單地作為函數,並將原始腳本分派到相關的。 這更有意義,因為只需要一個HTTP請求,並且所有請求都在同一過程中完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM