|
|
|
@ -1,5 +1,15 @@
|
|
|
|
|
package us.codecraft.webmagic.downloader;
|
|
|
|
|
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
import java.security.KeyManagementException;
|
|
|
|
|
import java.security.NoSuchAlgorithmException;
|
|
|
|
|
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.commons.lang3.StringUtils;
|
|
|
|
|
import org.apache.http.HttpException;
|
|
|
|
|
import org.apache.http.HttpRequest;
|
|
|
|
@ -14,16 +24,19 @@ import org.apache.http.config.SocketConfig;
|
|
|
|
|
import org.apache.http.conn.socket.ConnectionSocketFactory;
|
|
|
|
|
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
|
|
|
|
|
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
|
|
|
|
|
import org.apache.http.impl.client.*;
|
|
|
|
|
import org.apache.http.impl.client.BasicCookieStore;
|
|
|
|
|
import org.apache.http.impl.client.BasicCredentialsProvider;
|
|
|
|
|
import org.apache.http.impl.client.CloseableHttpClient;
|
|
|
|
|
import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;
|
|
|
|
|
import org.apache.http.impl.client.HttpClientBuilder;
|
|
|
|
|
import org.apache.http.impl.client.HttpClients;
|
|
|
|
|
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
|
|
|
|
|
import org.apache.http.impl.cookie.BasicClientCookie;
|
|
|
|
|
import org.apache.http.protocol.HttpContext;
|
|
|
|
|
|
|
|
|
|
import us.codecraft.webmagic.Site;
|
|
|
|
|
import us.codecraft.webmagic.proxy.Proxy;
|
|
|
|
|
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @author code4crafter@gmail.com <br>
|
|
|
|
|
* @since 0.4.0
|
|
|
|
@ -33,14 +46,46 @@ public class HttpClientGenerator {
|
|
|
|
|
private PoolingHttpClientConnectionManager connectionManager;
|
|
|
|
|
|
|
|
|
|
public HttpClientGenerator() {
|
|
|
|
|
SSLConnectionSocketFactory sslConnectionSocketFactory = null;
|
|
|
|
|
try {
|
|
|
|
|
sslConnectionSocketFactory = new SSLConnectionSocketFactory(createIgnoreVerifySSL());
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
Registry<ConnectionSocketFactory> reg = RegistryBuilder.<ConnectionSocketFactory>create()
|
|
|
|
|
.register("http", PlainConnectionSocketFactory.INSTANCE)
|
|
|
|
|
.register("https", SSLConnectionSocketFactory.getSocketFactory())
|
|
|
|
|
// .register("https", SSLConnectionSocketFactory.getSocketFactory())
|
|
|
|
|
.register("https", sslConnectionSocketFactory)
|
|
|
|
|
.build();
|
|
|
|
|
connectionManager = new PoolingHttpClientConnectionManager(reg);
|
|
|
|
|
connectionManager.setDefaultMaxPerRoute(100);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private 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 HttpClientGenerator setPoolSize(int poolSize) {
|
|
|
|
|
connectionManager.setMaxTotal(poolSize);
|
|
|
|
|
return this;
|
|
|
|
|