2015-09-28 303 views
0

爲什麼下面的代碼打印「Method:GET」而不是「Method:POST」?將POST請求視爲GET請求

我需要它以編程方式授權http://www.havenandhearth.com/portal/

public class Main { 

    public static void main(String[] args) { 

     try { 
      URL url = new URL("http://www.havenandhearth.com/portal/sec/login"); 
      HttpURLConnection conn = (HttpURLConnection)url.openConnection(); 

      String parameters = "username=xxx&password=yyy"; 

      conn.setRequestMethod("POST"); 
      conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
      conn.setRequestProperty("Content-Length", String.valueOf(parameters.length())); 

      conn.setDoOutput(true); 
      DataOutputStream wr = new DataOutputStream(conn.getOutputStream()); 
      wr.writeBytes(parameters); 
      wr.flush(); 
      wr.close(); 

      int responsecode = conn.getResponseCode(); 
      if (responsecode != HttpURLConnection.HTTP_OK) { 
       System.out.println("Unable to make POST request. Response code: " + responsecode); 
       return; 
      } 

      System.out.println("Method: " + conn.getRequestMethod()); 
     } catch (IOException ex) { 
      System.out.println("Error: " + ex.getMessage()); 
     } 
    } 
} 

如果我將URL更改爲http://httpbin.org/post,它按預期工作。

爲了實現目標,您需要將xxx和yyy替換爲實際的帳戶憑據。

在此先感謝。

+0

當我運行你的代碼,我看到這個結果:'方法:POST' –

+0

@David Herrero啊,這是因爲無效的帳戶憑據,對不起 – FrozenHeart

+1

好吧,我認爲,當您使用您的憑據成功的POST,網頁將您重定向到主頁,所以conn現在發出GET請求。 –

回答

0

這似乎是由於自動重定向。

如果我設置

conn.setInstanceFollowRedirects(false); 

它按預期工作。

+1

是的,你是對的,你回答了你自己的問題!哈哈,恭喜 PD:我從來沒有聽說過那個遊戲......看起來有趣 –

+0

@David Herrero是的,你應該看看它 – FrozenHeart