Java 如何使所有网络流量通过代理?

Java 如何使所有网络流量通过代理?,java,android,http,networking,proxy,Java,Android,Http,Networking,Proxy,我有一个向远程服务器发出http请求的应用程序。我使用以下代码执行此操作: HttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost("myURL"); try { ArrayList<BasicNameValuePair> postVariables = new ArrayList<BasicNameValuePair>(

我有一个向远程服务器发出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();
    }
不过,到目前为止还不错,我使用的库也会发出一些http请求。我无法访问库的代码,因此无法将这两行代码添加到代码中。我联系了该库的创建者,他们告诉我应该可以设置android环境,这样所有请求都会自动通过代理。有这样的事吗?我在谷歌上没有找到任何东西。
我基本上是在寻找一种方法,将上述两行设置为所有http请求的标准。请注意,APN没有将代理设置为整个手机的默认设置,因此应用程序必须手动执行此操作(是的,这意味着大多数应用程序无法在该客户的手机上运行)。


我已经有一两年没有使用它了,但是如果我没记错的话,您可以使用
System.setProperty(String,String)
为您的应用程序设置环境范围的设置,以便通过代理路由所有HTTP流量。您需要设置的属性是“http.proxyHost”和“http.proxyPort”,然后在不指定代理的情况下正常使用HttpClient,因为VM将处理路由请求。
有关我所说内容的更多信息,可以在这里找到文档:关于实际
System.setProperty(String,String)
函数的文档

如果这对您不起作用,请告诉我,我将尝试找出设置系统级代理的旧代码。顺便说一句,这实际上只是“系统级”,因为每个应用程序都在自己的Dalvik中运行,所以您不会影响其他应用程序的网络通信。

谢谢,我会看一看,这确实是我需要的。我不想影响其他应用:)。我还不能测试它,但我仔细阅读了你的建议,我认为这是正确的方法。威尔·马克回答道:“谢谢。有人把它弄好了吗?”?仍然无法让它工作。已尝试http.ProxyHost http.ProxyPort https.ProxyHost和https.ProxyPort。不能让它工作。有谁能提供一个示例来显示所使用的值吗?您现在可能不记得了,但您是否找到了可以通过代理重定向所有设备网络流量的代码?如果可能的话,你能分享代码吗?@sak对不起,我不知道我是否能用上这个。你试过大卫的答案吗?请记住,这是5年前提出的问题,自那时以来,Android发生了很大变化。是的,我知道,但我没有得到任何解决方案,尝试了很长时间,David说,我认为不可能将所有设备流量重定向到代理,因为他提到了这一点“每个应用程序都在它自己的Dalvik中运行,所以你不会影响其他应用程序的网络通信”。但至少感谢你的回复。@sak祝你好运,我记得我最初问这个问题是因为我需要一种通过应用程序控制它的方法(公司手机上的企业应用程序被锁定,根本无法管理,但必须通过APN连接才能获取相关数据),但手机本身的代理设置已经允许这样做。这是您的选项吗,仅使用手机的设置?是的,我可以使用手机设置,但它也不适用于所有应用,我以前尝试过。
    HttpHost httpHost = new HttpHost("proxyURL",8080);
    httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, httpHost);