2011-03-16 142 views
3

我創建一個服務,通過互聯網發佈的東西,一切都很好。但是當我將它部署到我們的服務器時,我得到連接狀態:403,禁止。我認爲這是因爲我們的服務器不允許直接訪問互聯網,而無需先登錄。我們必須首先在瀏覽器中用我們的用戶名/密碼登錄才能訪問互聯網。在Java中設置代理

我注意到,如果我登錄並訪問服務器中的互聯網,我部署的服務運行正常。但我不認爲這很實際,因爲在那種情況下,如果有人或我不先登錄,我的服務將無法運行。

我曾嘗試在java代碼中設置代理,但無濟於事。有人可以幫我解決這個問題嗎?這裏是我張貼我的服務片段。

System.getProperties().put("http.proxySet", "true"); 
System.getProperties().put("http.proxyHost", myHost); 
System.getProperties().put("http.proxyPort", "8080"); 
System.getProperties().put("http.proxyUser", myUser); 
System.getProperties().put("http.proxyPassword", myPassword); 
System.getProperties().put("http.nonProxyHosts", "localhost|127.0.0.1"); 

try { 
      URL url = new URL(urlAddress); 
      HttpURLConnection con = (HttpURLConnection) url.openConnection();   
      con.setRequestMethod("POST"); 
      con.setDoOutput(true); 
      con.setDoInput(true); 

      ... 

      if (con.getResponseCode() == HttpURLConnection.HTTP_OK) { 
       System.out.println("connection OK"); 
       istrm = con.getInputStream(); 
       if (istrm == null) { 
        System.out.println("istrm == null"); 
       } 

       ... 

      } else { 
       System.out.println("Response: " + con.getResponseCode() + ", " + con.getResponseMessage()); 
      } 
} 

而我處理轉到別的塊,並得到響應消息403

+1

http.proxySet是一個城市神話。它沒有效果。 – EJP 2012-04-11 18:59:44

回答

4

嘗試使用System.setProperty(字符串,字符串)來代替。

+1

我不認爲這會有所幫助。 'System.getProperties()'返回系統屬性對象...不是副本。 – 2011-03-16 03:19:13

+0

@Stephen查看JDK源代碼,我同意。 +1爲你的-D答案。 – 2011-03-16 14:44:21

1

我認爲問題在於你設置的屬性太晚了。 HTTP請求路由器代碼很可能在初始化期間讀取一次的屬性。如果您的代碼在HTTP請求路由器初始化後設置了屬性,則新的屬性值將不起作用,除非您可以使請求路由器重新初始化。

確保代理屬性設置生效的一種方法是在啓動Web服務器的Java命令行上設置它們;例如在Linux上使用Tomcat時,可​​以通過在JAVA_OPTS環境變量中設置相關的「-D ...」選項來執行此操作。

3

這是你如何設置應用程序範圍內代理..

注意:使用http.proxyHosthttp.proxyPort如果你不需要HTTPS。