当我创建DefaultHttpClient对象并尝试点击网页时,请求不会通过我在“设置”中指定的代理进行路由。
通过API文档,虽然Android确实有一个允许我阅读系统代理设置的Proxy类,但我没有看到可以指定代理的任何地方。
有没有办法在HttpClient中使用代理设置?
答案 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();