我有一个应用程序向远程服务器发出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没有将代理设置为整个手机的默认设置,因此应用程序必须手动执行此操作(是的,这意味着大多数应用程序无法在该客户的手机上运行)。
答案 0 :(得分:1)
我需要使用它已经有一两年了,但是如果我没记错的话,您可以使用System.setProperty(String, String)
为应用程序设置环境范围的设置,以便通过代理路由所有HTTP流量。您需要设置的属性是“http.proxyHost”和“http.proxyPort”,然后通常使用您的HttpClient而不指定代理,因为VM将处理路由请求。
有关我正在谈论的内容的更多信息的文档可以在此处找到:ProxySelector (just so you know what keys to use)和here,了解有关实际System.setProperty(String, String)
功能的文档
如果这对您不起作用,请告诉我,我将尝试挖掘出设置系统级代理的旧代码。顺便说一句,它实际上只是“系统级别”,因为每个应用程序都在自己的Dalvik中运行,因此您不会影响其他应用程序的网络通信。