2014-10-08 110 views
2

以下是我的POST請求登錄網站的代碼。當我運行相同的時候,我收到了411的消息響應。任何人都可以幫助我設置正確的內容長度嗎?java中的HTTP POST請求 - 設置內容長度

try { 

     String request = "http://<domain.com>/login"; 

     URL url = new URL(request); 
     HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
     connection.setDoInput(true); 

     connection.setInstanceFollowRedirects(false); 
     connection.setRequestProperty("Content-Length", "1"); 
     connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 

     connection.setRequestProperty("email", "abc"); 
     connection.setRequestProperty("password", "xyz"); 

     connection.setDoOutput(true); 

     connection.setRequestMethod("POST"); 

     int code = connection.getResponseCode(); 
     System.out.println("Response Code of the object is " +code); 
     if(code == 200) 
      System.out.println("OK"); 
     connection.disconnect(); 
     } catch (MalformedURLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
+1

我有同樣的問題。這就是我發現的:411只從實現HTTP 1.0的服務器返回。在HTTP1.1中,Content-Length屬性在POST請求中不是強制性的。像你一樣手動設置Content-Length是徒勞的。 Java會覆蓋它。 但是,看起來,在一個零長度的POST請求中,java根本沒有設置Content-Length。至少這是我的假設。在我的情況下,實際的問題是,一個POST請求發送,GET請求是充足的。有了GET請求,您不需要設置Content-Length,因爲沒有任何內容被髮送到服務器。 – haferblues 2014-12-18 14:27:25

回答

2

好的 - 你沒有移動任何東西到請求的主體,所以你應該設置長度爲「0」。

地址:

connection.connect();

之後:

connection.setRequestMethod(「POST」);

谷歌「httpurlconnection post參數」用於向POST請求添加參數。該網站至少有四個或五個解決方案。

+0

我試過了,但迴應是一樣的。響應如下:'對象的響應代碼是411 null:[HTTP/1.1 411長度要求] 服務器:[WEBrick/1.3.1(Ruby/2.1.2/2014-05-08)] 連接:[close] Content-Length:[317] Date:[Wed,08 Oct 2014 01:25:48 GMT] Content-Type:[text/html; charset = ISO-8859-1]' – Angel 2014-10-08 01:26:39

+0

註釋掉電子郵件和密碼的setProperty,並將長度保持爲零,看看你是否仍然得到411. – BillFromHawaii 2014-10-08 03:46:03

+0

是的,我評論了電子郵件和密碼,但我得到了同樣的迴應。 – Angel 2014-10-08 17:32:46