Android HttpClient不使用系统代理设置

时间:2010-12-21 20:09:50

标签: android proxy httpclient

当我创建DefaultHttpClient对象并尝试点击网页时,请求不会通过我在“设置”中指定的代理进行路由。

通过API文档,虽然Android确实有一个允许我阅读系统代理设置的Proxy类,但我没有看到可以指定代理的任何地方。

有没有办法在HttpClient中使用代理设置?

4 个答案:

答案 0 :(得分:23)

尝试:

DefaultHttpClient httpclient = new DefaultHttpClient();

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

(从here淘汰)

答案 1 :(得分: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);

这些都是'获取'代理设置的方法,'set'方法以相同的方式实现,通过System.setProperty或httpclient.setParams。

希望这有帮助!

答案 2 :(得分:3)

我正在开发Android Proxy Library,试图抽象出每个Android版本的代理设置访问权限。您可以轻松获取用户当前选择的代理设置。

答案 3 :(得分: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();