gpt4 book ai didi

java - 如何让所有网络流量都通过代理?

转载 作者:可可西里 更新时间:2023-11-01 16:38:21 33 4
gpt4 key购买 nike

我有一个向远程服务器发出 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 不会将代理设置为整个手机的默认代理,因此应用程序必须手动执行此操作(是的,这意味着大多数应用程序无法在该客户的手机上运行)。

最佳答案


自从我需要使用它以来已经一两年了,但如果我没记错的话,您可以使用 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 中运行,因此您不会影响其他应用程序的网络通信。

关于java - 如何让所有网络流量都通过代理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17290970/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com