2012-03-04 63 views
0

當我運行下面的代碼時,我總是收到上述錯誤。所有的跡象都表明了我讀過的COOKIES有問題。如果我是正確的,我將如何去實現CookieManager來解決這個問題?或者,如果這不是COOKIES的問題,我將如何解決問題?服務器返回的HTTP響應代碼:403對於URL :(我該如何解決這個問題?)

public class Client { 

    public Client(){ 
    } 

    String executePost(String targetURL, String urlParameters){ 
     URL url; 
     HttpURLConnection connection = null; 

     try{ 
      //Create connection 
      url = new URL(targetURL); 
      connection = (HttpURLConnection)url.openConnection(); 
      connection.setChunkedStreamingMode(0); 
      connection.setRequestMethod("POST"); 
      connection.setRequestProperty("Content-Type", 
        "application/x-www-form-urlencoded"); 
      connection.setRequestProperty("Content-Length", "" + 
        Integer.toString(urlParameters.getBytes().length)); 
      connection.setRequestProperty("Content-Language", "en-US"); 

      connection.setUseCaches(false); 
      connection.setDoInput(true); 
      connection.setDoOutput(true); 

      //send Request 
      DataOutputStream dataout = new DataOutputStream(connection.getOutputStream()); 
      dataout.writeBytes(urlParameters); 
      dataout.flush(); 
      dataout.close(); 

      //get response 
      InputStream is = connection.getInputStream(); 
      BufferedReader br = new BufferedReader(new InputStreamReader(is)); 
      String line; 
      StringBuffer response = new StringBuffer(); 

      while((line = br.readLine()) != null){ 
       response.append(line); 
       response.append('\n'); 

      } 
      System.out.println(response.toString()); 
      br.close(); 
      return response.toString(); 
     }catch(Exception e){ 
      System.out.println("Unable to full create connection"); 
      e.printStackTrace(); 
      return null; 
     }finally { 

      if(connection != null) { 
       connection.disconnect(); 
      } 
     } 
    } 
} 
+0

可能是你不允許訪問該網址... – 2012-03-04 09:41:48

+0

@Tomas我如何解決它?我將信息發送到位於PUBLIC_HTML文件夾中的PHP文件。 PHP文件然後訪問一個mysql數據庫並返回請求的數據。 – Fabii 2012-03-04 09:59:04

+0

@Tomas--表面上看來,這是正確的。但是,它假定服務器正在使用正確的狀態碼。 – 2012-03-04 10:00:56

回答

3

我刪除了:connection.setChunkedStreamingMode(0);和代碼的工作,因爲它應該

String executePost(String targetURL, String urlParameters){ 

    URL url; 
    HttpURLConnection connection = null;   
    try{ 
     //Create connection 

     url = new URL(targetURL); 
     connection = (HttpURLConnection)url.openConnection(); 

     connection.setRequestMethod("POST"); 
     connection.setRequestProperty("Content-Type", 
        "application/x-www-form-urlencoded"); 
     connection.setRequestProperty("Content-Language", "en-US"); 
     connection.setRequestProperty("User-Agent", 
       "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11"); 

     connection.setUseCaches(false); 
     connection.setDoInput(true); 
     connection.setDoOutput(true); 

     //send Request 
     DataOutputStream dataout = new DataOutputStream(connection.getOutputStream()); 
     dataout.writeBytes(urlParameters); 
     dataout.flush(); 
     dataout.close(); 

     //get response 
     InputStream is = connection.getInputStream(); 
     BufferedReader br = new BufferedReader(new InputStreamReader(is)); 
     String line; 
     StringBuffer response = new StringBuffer(); 

     while((line = br.readLine()) != null){ 
      response.append(line); 
      response.append('\n'); 

     } 
     System.out.println(response.toString()); 
     br.close(); 
     return response.toString(); 
    }catch(Exception e){ 
     System.out.println("Unable to full create connection"); 
     e.printStackTrace(); 
     return null; 
    }finally { 

      if(connection != null) { 
      connection.disconnect(); 
      } 
    } 


} 
2

403響應表示「禁止」。

所有跡象都表明COOKIES與我讀過的內容有關。如果我是正確的,我將如何去實現CookieManager來解決這個問題?或者,如果這不是COOKIES的問題,我將如何解決問題?

它不那麼簡單。

  • 這可能是因爲您需要提供有效憑證(以cookie,基本身份驗證標頭或其他形式)。但是,您希望服務器在這種情況下使用401響應,或者使用302響應您的瀏覽器登錄頁面。

  • 也可能是您提供了憑據,但它們不足以滿足您要執行的請求。

最好的辦法是找出當您嘗試從您的網絡瀏覽器登錄並使用該服務時發生的情況。然後嘗試複製。或者,閱讀網站文檔或詢問網站管理員要執行的操作。

如果它是您嘗試訪問的站點/服務器,那麼您需要弄清楚安全性是如何實現的。也許你錯誤地配置了服務器,或者忽略了設置/啓用登錄。


這是不可能的(IMO),您將解決由只是這個問題設置cookie管理。

+0

http:// /frontend/x3/index.htmllogin_theme=cpanel&post_login=<數字系列>這是我登錄時經歷的順序。任何想法? – Fabii 2012-03-04 10:07:11

+0

@Fabii - 我的想法是*你*需要解決:-) – 2012-03-04 12:06:41

+0

謝謝斯蒂芬我會看看我能想出什麼。 – Fabii 2012-03-04 20:16:06

0

如果你看到的setChunkedStreamingMode API文檔,它已經提到那裏,不是所有的服務器都支持此模式。你確定你正在建立連接的服務器支持這個嗎?

相關問題