2010-12-21 82 views
13

當我創建一個DefaultHttpClient對象並嘗試點擊某個網頁時,該請求不會通過我在「設置」中指定的代理進行路由。Android HttpClient不使用系統代理設置

翻閱API文檔,我沒有看到任何地方我可以指定代理,但Android確實有Proxy類,它允許我讀取系統的代理設置。

有沒有一種方法可以在HttpClient中使用代理設置?

+0

沒有爲`HttpRoute`一個構造函數,需要一個代理主機作爲參數,形成路線..但我看不到如何創建一個將使用它的HttpClient。 http://developer.android.com/reference/org/apache/http/conn/routing/HttpRoute.html – 2010-12-21 20:34:14

+0

是的,我也看到了,但我無法弄清楚如何將它們連接在一起。 – Cristian 2010-12-21 20:53:23

+1

Oooh ..你有沒有看到這個答案? http://stackoverflow.com/questions/2539669/android-unable-to-make-httprequest-behind-firewall/2542928#2542928 – 2010-12-21 21:12:20

回答

23

嘗試:

DefaultHttpClient httpclient = new DefaultHttpClient(); 

HttpHost proxy = new HttpHost("someproxy", 8080); 
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy); 

(從here撲殺)

+3

perfekt,但我必須處理設備上的Webrequests,它可能使用(不同)Proxys或不代理設置,有沒有可能找出用戶是否有代理設置?我的一些客戶使用不同的封閉用戶組。 – 2red13 2011-10-11 09:07:26

+0

爲了從系統中獲得正確的代理檢查出這個答案:http://stackoverflow.com/questions/10811698/getting-wifi-proxy-settings-in-android/13616054#13616054 – Adam 2012-11-29 00:26:55

3

我開發,嘗試抽象訪問代理服務器設置爲每一個Android版本的Android Proxy Library。您可以輕鬆獲取用戶當前選擇的代理設置。

9

首先,我會確保該請求符合您在Android設備設置中設置的代理設置屬性。您可以通過查看android.provider.Settings中的System類來確定此代碼;

要確定用戶是否有系統代理設置,你可以做到以下幾點:

System.getProperty("http.proxyHost"); 
    System.getProperty("http.proxyPort"); 

    System.getProperty("https.proxyHost"); 
    System.getProperty("https.proxyPort"); 

如果你有DefaultHTTPClient的實例,那麼你可以檢查它是否有相關的代理服務器設置爲好。

DefaultHttpClient httpclient = new DefaultHttpClient(); 
    httpclient.getParams().getParameter(ConnRoutePNames.DEFAULT_PROXY); 

這些都是辦法「得到」的代理設置,以及「設置」方法相同的方式來實現,無論是通過System.setProperty或httpclient.setParams。

希望這有助於!

1

嘗試:

System.setProperty("http.proxyHost", <your proxy host name>); 
System.setProperty("http.proxyPort", <your proxy port>); 

DefaultHttpClient httpclient = new DefaultHttpClient(); 
HttpHost httpproxy = new HttpHost("<your proxy host>",<your proxy port>); 
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, httpproxy); 

HttpHost proxy = new HttpHost("ip address",port number); 
DefaultHttpClient httpclient = new DefaultHttpClient(); 
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,proxy); 

HttpPost httpost = new HttpPost(url); 
List<NameValuePair> nvps = new ArrayList<NameValuePair>(); 
nvps.add(new BasicNameValuePair("param name", param)); 
httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.ISO_8859_1)); 
HttpResponse response = httpclient.execute(httpost); 

HttpEntity entity = response.getEntity(); 
System.out.println("Request Handled?: " + response.getStatusLine()); 
InputStream in = entity.getContent(); 
httpclient.getConnectionManager().shutdown();