1. 程式人生 > 其它 >Java http請求設定代理

Java http請求設定代理

技術標籤:Java 工具類javahttpproxy

import java.io.IOException;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.cert.CertificateException;
import java.util.Map;

import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import org.apache.http.HttpEntity; import org.apache.http.HttpHost; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet;
import org.apache.http.config.Registry; import org.apache.http.config.RegistryBuilder; import org.apache.http.conn.socket.ConnectionSocketFactory; import org.apache.http.conn.socket.PlainConnectionSocketFactory; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.
HttpClientBuilder; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.conn.DefaultProxyRoutePlanner; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.http.util.EntityUtils; public class HTTPProxy { public static SSLContext createIgnoreVerifySSL() throws NoSuchAlgorithmException, KeyManagementException { SSLContext sc = SSLContext.getInstance("SSLv3"); // 實現一個X509TrustManager介面,用於繞過驗證,不用修改裡面的方法 X509TrustManager trustManager = new X509TrustManager() { @Override public void checkClientTrusted( java.security.cert.X509Certificate[] paramArrayOfX509Certificate, String paramString) throws CertificateException { } @Override public void checkServerTrusted( java.security.cert.X509Certificate[] paramArrayOfX509Certificate, String paramString) throws CertificateException { } @Override public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } }; sc.init(null, new TrustManager[] { trustManager }, null); return sc; } public static HttpClientBuilder proxy(String hostOrIP, int port){ // 依次是代理地址,代理埠號,協議型別 HttpHost proxy = new HttpHost(hostOrIP, port, "http"); DefaultProxyRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxy); return HttpClients.custom().setRoutePlanner(routePlanner); } public static Map<String,String> sendGetDocker1(String url) throws ClientProtocolException, IOException, KeyManagementException, NoSuchAlgorithmException { //HttpHost proxy =new HttpHost("127.0.0.1",1080,"HTTP"); //繞過證書驗證,處理https請求 //SSLContext sslcontext = createIgnoreVerifySSL(); // 設定協議http和https對應的處理socket連結工廠的物件 Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create() .register("http", PlainConnectionSocketFactory.INSTANCE) //.register("https", new SSLConnectionSocketFactory(sslcontext)) .build(); PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry); HttpClients.custom().setConnectionManager(connManager); CloseableHttpClient client = proxy("127.0.0.1", 1080).setConnectionManager(connManager).build(); //CloseableHttpClient httpclient = HttpClients.createDefault(); HttpGet request =new HttpGet(url); //HttpPost httpPost = new HttpPost(url); //request.setHeader("Accept", "Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); //request.setHeader("Connection", "keep-alive"); //request.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0"); CloseableHttpResponse response = client.execute(request); //獲得起始行 System.out.println(response.getStatusLine().toString()+"\n"); //獲得首部---當然也可以使用其他方法獲取 org.apache.http.Header[] hs=response.getAllHeaders(); for(org.apache.http.Header h:hs){ System.out.println(h.getName()+":\t"+h.getValue()+"\n"); } try { // 獲取響應實體 HttpEntity entity = response.getEntity(); System.out.println("--------------------------------------"); // 列印響應狀態 System.out.println(response.getStatusLine()); if (entity != null) { // 列印響應內容長度 System.out.println("Response content length: " + entity.getContentLength()); // 列印響應內容 System.out.println("Response content: " + EntityUtils.toString(entity)); } System.out.println("------------------------------------"); } finally { response.close(); } return null; } public static void main(String[] args) throws KeyManagementException, NoSuchAlgorithmException, NoSuchProviderException, IOException{ String urlValue="http://graph.facebook.com/v2.5/223495844457800/?fields=likes&access_token=EAACEdEose0cBANo9jZARJF7NBvEWkOR7NZA1rcZAojTuj3ofwcniFCa9AagZCD08t5WI4JN0GlRZBT23TZBaWzo0HgyQNygFY5EzZBIYTJ0ZBZCdp1r3WPZBjC3NsoZCTizkFIlR4cYxHw1T9DpdnV9Xzc8AqJIYKnS7WHnOYHxaI2sHSZAtMKTl2QXouYdj7ghJcZCcOVCpGjvjvB4S8NgKiyF3X"; //String urlValue="http://www.baidu.com"; //System.setProperty("http.proxyHost", "127.0.0.1"); //System.setProperty("http.proxyPort", "1080"); //urlValue=URLEncoder.encode(urlValue); System.out.println(urlValue); System.out.println(sendGetDocker1(urlValue)); } }