當我創建一個DefaultHttpClient對象並嘗試點擊某個網頁時,該請求不會通過我在「設置」中指定的代理進行路由。Android HttpClient不使用系統代理設置
翻閱API文檔,我沒有看到任何地方我可以指定代理,但Android確實有Proxy類,它允許我讀取系統的代理設置。
有沒有一種方法可以在HttpClient中使用代理設置?
當我創建一個DefaultHttpClient對象並嘗試點擊某個網頁時,該請求不會通過我在「設置」中指定的代理進行路由。Android HttpClient不使用系統代理設置
翻閱API文檔,我沒有看到任何地方我可以指定代理,但Android確實有Proxy類,它允許我讀取系統的代理設置。
有沒有一種方法可以在HttpClient中使用代理設置?
嘗試:
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpHost proxy = new HttpHost("someproxy", 8080);
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
(從here撲殺)
我開發,嘗試抽象訪問代理服務器設置爲每一個Android版本的Android Proxy Library。您可以輕鬆獲取用戶當前選擇的代理設置。
首先,我會確保該請求符合您在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。
希望這有助於!
嘗試:
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();
沒有爲`HttpRoute`一個構造函數,需要一個代理主機作爲參數,形成路線..但我看不到如何創建一個將使用它的HttpClient。 http://developer.android.com/reference/org/apache/http/conn/routing/HttpRoute.html – 2010-12-21 20:34:14
是的,我也看到了,但我無法弄清楚如何將它們連接在一起。 – Cristian 2010-12-21 20:53:23
Oooh ..你有沒有看到這個答案? http://stackoverflow.com/questions/2539669/android-unable-to-make-httprequest-behind-firewall/2542928#2542928 – 2010-12-21 21:12:20