2014-04-11 25 views
2

我有一臺CGI服務器,它將REQUEST_METHOD打印到系統日誌。 我有網頁可以GET和POST到該CGI和這兩種方法打印我所期望的。 我有一個可以通過它的java程序。 但是當我嘗試在Java中使用POST:來自java的HTTP POST作爲GET到達服務器

URL url = new URL("https://192.168.10.178/mycgi"); 
conn = (HttpsURLConnection)url.openConnection(); 
conn.setDoOutput(true); 
conn.setRequestMethod("POST"); // <- this bit! 
InputStream is = conn.getInputStream(); 

結果爲零的內容長度的GET。 很明顯,我有更多的代碼來設置內容類型和配置,並將數據寫入其中,但是有或沒有剩餘的代碼,我仍然以GET請求到達服務器。

我發現這種抱怨這裏:

https://community.oracle.com/thread/1535571?start=0&tstart=0

,其中許多人似乎有同樣的問題,但沒有答案,在這裏:

Android HTTP POST request sent from application but server "sees" it as a GET request

如果解決方案是使用apache http客戶端,我寧願儘可能避免這種情況,因爲它增加了一些不需要它們的項目的依賴關係。

我在解釋這一個有點損失。任何人有任何建議?

+0

從已刪除的答案中重複評論:請求採用「https:// 192.168.10.178/mycgi」的形式,並且絕對不包含?或=字符 –

回答

2

確保您的服務器沒有響應最終目的地的302/301響應。這可能會強制客戶端重新發送POST作爲GET。

有關原因的解釋請參閱What is the correct behavior expected of an HTTP POST => 302 redirect to GET?

301/302可能只是由於網址中缺少斜線。在200代碼之前檢查您的服務器日誌是否有301/302代碼。

+0

我不確定你的意思是一個結尾的斜槓 - 我試過'https:// 192.168.10.178/mycgi /',它沒有任何效果。然而,你似乎對302/301是正確的,並且'https:// 192.168.10.178/path/cgi-bin/mycgi'正在工作。我想知道爲什麼網頁瀏覽器能夠正常工作,但是我的java代碼卻沒有,但是這回答了我的問題!謝謝。 –

相關問題