JAVA通过代理IP发送HTTP请求

文中基于apache的httpclient 4.5.2,代理服务器有用户名密码鉴权。

首先,对于鉴权,我们需要设置身份认证,并通过配置的身份认证信息来创建一个httpclient;

接下来需要创建一个代理,并设置到请求信息中;

最后是执行请求。

代码如下:

        CredentialsProvider credsProvider = new BasicCredentialsProvider();
        credsProvider.setCredentials(
                new AuthScope(代理IP, 代理port),
                new UsernamePasswordCredentials(鉴权用户名, 鉴权密码));

        CloseableHttpClient client = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build();

        HttpHost proxy = new HttpHost(代理IP, 代理port);
        RequestConfig config = RequestConfig.custom().setProxy(proxy).build();

        HttpPost req = new HttpPost(目标URL);// GET请求用HttpGet
        req.setConfig(config);
        CloseableHttpResponse resp = client.execute(req);
        try {
            System.out.println(resp);
        } finally {
            resp.close();
        }
在测试中笔者犯了几个很低级的错误,首先目标URL不能是localhost/127.0.0.1,因为这样其实代理服务器请求的是自己,但是因为代理服务器本地并没有部署对应服务,所以会返回失败,笔者这里返回的是503错误。另一个是因为笔者请求的代理是部署在公有云上的,如果使用的是内网IP也是不行的,因为根本找不到那个IP,所以使用前要确认代理是部署在哪的。


参考文献:

https://blog.csdn.net/ktlifeng/article/details/51099370

https://blog.csdn.net/zhangbin666/article/details/78351096?locationNum=4&fps=1