Java http請求設定代理
阿新 • • 發佈:2021-02-16
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));
}
}