解决方案 »
- JList中如何实现鼠标拖动,交换2个元素的值
- 菜鸟求教,java中获取当前时间转换成UTC毫秒值
- oracle 的 sqlldr 导入数据时
- 关于两个EntityManager问题
- 新手提问:org.apache.struts.action.ActionForm这个类事在哪个jar中???哪里可以下载到包
- 统计:您发布的tomcat应用多长时间重起一次
- 深圳地区找j2ee老师!
- weblogic下开发jms客户端的问题,急,在线等待
- 如何用j2ee打造web最安全的登陆程序
- JBuilder开发Entity bean时无法建立Client测试程序!
- DecimalFormat格式化double类型的数字有误差
- Java连接SQL Server出现错误,求指教
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;import javax.net.ssl.SSLContext;import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLContextBuilder;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;public class XiaMen_IS
{ public static void main(String[] args)
{
crawler();
} // 信息抓取
public static void crawler()
{
try
{ CloseableHttpClient cbHttpClient = createSSLInsecureClient();
getVerficationCode(cbHttpClient);
} catch (Exception e)
{
System.out.println("---厦门社保抓取失败---");
}
} // 获取验证码
private static String getVerficationCode(CloseableHttpClient cbHttpClient) throws Exception
{
try
{
String url = "https://app.xmhrss.gov.cn/wcm/servlet/VCodeServlet";// 验证码地址
HttpGet get = new HttpGet(url);
HttpResponse response = cbHttpClient.execute(get);// 报异常
// 获取验证码字节数组
byte data[] = EntityUtils.toByteArray(response.getEntity()); } catch (Exception e)
{
System.out.println("厦门社保下载验证码异常:");
e.printStackTrace();
throw e;
} return null;
} // client工具函数,信任对方(https)所有证书
public static CloseableHttpClient createSSLInsecureClient()
{
try
{
// 创建安全套接字对象
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy()
{
// 信任所有
public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException
{
return true;
}
}).build();
// 获取分层tls/ssl连接
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext);
return HttpClients.custom().setSSLSocketFactory(sslsf).build();
} catch (KeyManagementException e)
{
e.printStackTrace();
} catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
} catch (KeyStoreException e)
{
e.printStackTrace();
}
return HttpClients.createDefault();
}}
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext);
改为
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext,new String[] {"SSLv3"}, null, SSLConnectionSocketFactory.getDefaultHostnameVerifier());亲测已经可以把验证码下载下来了。
我用4.4运行的,org.apache.http.conn.ssl.SSLConnectionSocketFactory。
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext,new String[] {"SSLv3"}, null, null);
就可以了啊