2010-12-21 44 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();