Apache HttpClient 4.1 – 代理设置

我试图将一些参数POST到服务器,但我需要设置代理。 你可以帮助我对它的代码“设置代理”进行排序吗?

HttpHost proxy = new HttpHost("xx.xxxx"); DefaultHttpClient httpclient = new DefaultHttpClient(); httpclient.getParams().setParameter("3128",proxy); HttpPost httpost = new HttpPost(url); List nvps = new ArrayList(); nvps.add(new BasicNameValuePair("aranan", song)); httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8)); HttpResponse response = httpclient.execute(httpost); HttpEntity entity = response.getEntity(); System.out.println("Request Handled?: " + response.getStatusLine()); in = entity.getContent(); httpclient.getConnectionManager().shutdown(); 

是的,我解决了我自己的问题,这一行

 httpclient.getParams().setParameter("3128",proxy); 

应该

 httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,proxy); 

完整的Apache HttpClient 4.1示例,设置代理可以在下面找到

 HttpHost proxy = new HttpHost("ip address",port number); DefaultHttpClient httpclient = new DefaultHttpClient(); httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,proxy); HttpPost httpost = new HttpPost(url); List nvps = new ArrayList(); nvps.add(new BasicNameValuePair("param name", param)); httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.ISO_8859_1)); HttpResponse response = httpclient.execute(httpost); HttpEntity entity = response.getEntity(); System.out.println("Request Handled?: " + response.getStatusLine()); InputStream in = entity.getContent(); httpclient.getConnectionManager().shutdown(); 

非弃用的做法是:

 HttpHost proxy = new HttpHost("proxy.com", 80, "http"); DefaultProxyRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxy); CloseableHttpClient httpclient = HttpClients.custom() .setRoutePlanner(routePlanner) .build(); 

当我使用apache httpclient v4.5.5时,我发现在v4.3中不推荐使用HttpClient.getParams(),我们应该使用org.apache.http.client.config.RequestConfig 。 代码示例显示:

  HttpHost target = new HttpHost("httpbin.org", 443, "https"); HttpHost proxy = new HttpHost("127.0.0.1", 8080, "http"); RequestConfig config = RequestConfig.custom() .setProxy(proxy) .build(); HttpGet request = new HttpGet("/"); request.setConfig(config); CloseableHttpResponse response = httpclient.execute(target, request); 

这是我用来设置代理的快捷方式:

 import org.apache.http.HttpHost; import org.apache.http.client.HttpClient; import org.apache.http.impl.client.HttpClientBuilder; ... HttpHost proxy = new HttpHost("www.proxy.com", 8080, "http"); HttpClient httpClient = HttpClientBuilder.create().setProxy(proxy).build();