【发布时间】:2013-06-25 06:54:22
【问题描述】:
我有一个向远程服务器发出 http 请求的应用程序。我使用以下代码执行此操作:
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("myURL");
try {
ArrayList<BasicNameValuePair> postVariables = new ArrayList<BasicNameValuePair>(2);
postVariables.add(new BasicNameValuePair("key","value"));
httpPost.setEntity(new UrlEncodedFormEntity(postVariables));
HttpResponse response = httpClient.execute(httpPost);
String responseString = EntityUtils.toString(response.getEntity());
if (responseString.contains("\"success\":true")){
//this means the request succeeded
} else {
//failed
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
这非常顺利,但我们的一位客户设置了一个 APN,要求请求通过某个代理服务器。如果我将以下内容添加到有效的请求中,则请求会通过代理重新路由到服务器:
HttpHost httpHost = new HttpHost("proxyURL",8080);
httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, httpHost);
到目前为止,一切都很好,但是,我使用的库也可以发出一些 http 请求。我无法访问该库的代码,因此我无法将这两行添加到代码中。我联系了该库的创建者,他们告诉我应该可以设置 android 环境,以便所有请求都会自动通过代理。有没有类似的东西?我在谷歌上没有找到任何东西。
我基本上是在寻找一种将上述两行设置为所有 http 请求的标准的方法。请注意,APN 不会将代理设置为整个手机的默认设置,因此应用必须手动执行此操作(是的,这意味着大多数应用无法在该客户的手机上运行)。
【问题讨论】:
-
您现在可能不记得了,但是您是否找到了可以通过代理重定向所有设备网络流量的代码?如果可以的话可以分享一下代码吗?
-
@sak 对不起,我什至不知道我是否能正常工作。你试过大卫的答案吗?请记住,这是 5 年前提出的问题,从那时起 Android 发生了很大变化。
-
是的,我知道,但我没有得到任何解决方案,尝试了很长时间,根据大卫的说法,我认为不可能将所有设备流量重定向到代理,因为他提到“每个应用程序都运行在它自己的 Dalvik 中,所以你不会影响其他应用程序的网络通信”。但至少感谢您的回复。
-
@sak 祝你好运,我记得我最初问这个是因为我需要一种通过应用程序控制它的方法(锁定企业应用程序在根本没有管理的公司手机上,但必须连接通过 APN 获取相关数据),但手机本身的代理设置已经允许这样做。仅使用手机的设置是否适合您?
-
是的,我可以使用手机设置,但它也不适用于所有应用程序,我之前尝试过。
标签: java android http networking proxy