不少同学在做HTTP请求新浪授权或新浪数据的时候会出现 javax.net.ssl.SSLPeerUnverifiedException: No peer certificate的异常。现给出解决方法(已通过测试)。

写了一个自定义类继承SSLSocketFactory:

  1. import java.io.IOException;
  2. import java.net.Socket;
  3. import java.net.UnknownHostException;
  4. import java.security.KeyManagementException;
  5. import java.security.KeyStore;
  6. import java.security.KeyStoreException;
  7. import java.security.NoSuchAlgorithmException;
  8. import java.security.UnrecoverableKeyException;
  9. import javax.net.ssl.SSLContext;
  10. import javax.net.ssl.TrustManager;
  11. import javax.net.ssl.X509TrustManager;
  12. import org.apache.http.conn.ssl.SSLSocketFactory;
  13. public class SSLSocketFactoryEx extends SSLSocketFactory {
  14. SSLContext sslContext = SSLContext.getInstance("TLS");
  15. public SSLSocketFactoryEx(KeyStore truststore)
  16. throws NoSuchAlgorithmException, KeyManagementException,
  17. KeyStoreException, UnrecoverableKeyException {
  18. super(truststore);
  19. TrustManager tm = new X509TrustManager() {
  20. public java.security.cert.X509Certificate[] getAcceptedIssuers() {return null;}
  21. @Override
  22. public void checkClientTrusted(
  23. java.security.cert.X509Certificate[] chain, String authType)
  24. throws java.security.cert.CertificateException {}
  25. @Override
  26. public void checkServerTrusted(
  27. java.security.cert.X509Certificate[] chain, String authType)
  28. throws java.security.cert.CertificateException {}
  29. };
  30. sslContext.init(null, new TrustManager[] { tm }, null);
  31. }
  32. @Override
  33. public Socket createSocket(Socket socket, String host, int
    port,boolean autoClose) throws IOException, UnknownHostException {
  34. return sslContext.getSocketFactory().createSocket(socket, host, port,autoClose);
  35. }
  36. @Override
  37. public Socket createSocket() throws IOException {
  38. return sslContext.getSocketFactory().createSocket();
  39. }
  40. }

复制代码

再来看看如何做回调:

  1. public static HttpClient getNewHttpClient() {
  2. try {
  3. KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
  4. trustStore.load(null, null);
  5. SSLSocketFactory sf = new SSLSocketFactoryEx(trustStore);
  6. sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
  7. HttpParams params = new BasicHttpParams();
  8. HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
  9. HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
  10. SchemeRegistry registry = new SchemeRegistry();
  11. registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
  12. registry.register(new Scheme("https", sf, 443));
  13. ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);
  14. return new DefaultHttpClient(ccm, params);
  15. } catch (Exception e) {
  16. return new DefaultHttpClient();
  17. }
  18. }

复制代码

现在就可以拿这个HTTPClient去请求数据了!!!!!GOOD

 

http请求No peer certificate的解决方法的更多相关文章

  1. Android进阶(二)https请求No peer certificate的解决方法.

    在做Android客户端通过https协议访问12306,并爬取数据时,出现了如下错误: 其中有一条错误提示是 javax.net.ssl.SSLPeerUnverifiedException: No ...

  2. .Net MVC5异步请求Entity Framework 无限循环解决方法

    .Net MVC5异步请求Entity Framework 无限循环解决方法 Entity Framework 存在一对多.多对多之间的关系,相互依赖,在返回JSON数据时往往会出现相互引用造成的无限 ...

  3. Get,Post请求中文乱码问题有效解决方法

    本文主要介绍如何有效解决web请求中的乱码问题,其实解决方法有很多种,不同的请求类型解决方法也不相同. 本文只介绍最方便的一种: 1.先修改jsp中的编码方式 2.针对Post方式提交的请求如果出现乱 ...

  4. Jmeter HTTP请求后响应数据显示乱码解决方法

    Jmeter请求后结果树里无论是text还是html响应数据显示乱码,这是因为jmeter 编码格式配置文件默认不开启导致的,解决方法如下: 1)进入jmeter-***\bin目录下,找到jmete ...

  5. 资料汇总--Ajax中Put和Delete请求传递参数无效的解决方法(Restful风格)【转】

    开发环境:Tomcat9.0 在使用Ajax实现Restful的时候,有时候会出现无法Put.Delete请求参数无法传递到程序中的尴尬情况,此时我们可以有两种解决方案:1.使用地址重写的方法传递参数 ...

  6. Web服务器(容器)请求常见的错误及其解决方法

    首先我们来看看容器如何找到service()方法?(1)当在浏览器中输入 http://localhost:8080/firstweb/sayHi 这个地址后,容器是如何找到 HelloServlet ...

  7. 小程序请求豆瓣API报403解决方法

    微信小程序使用wx.request API请求豆瓣公开api的时候,会报一个403(Forbidden)的错误.这是为什么呢?是由于来自小程序的调用过多,豆瓣来自于小程序的调用被禁止.这里收集以下三种 ...

  8. Ajax中Put和Delete请求传递参数无效的解决方法(Restful风格)

    本文装载自:http://blog.csdn.net/u012737182/article/details/52831008    感谢原文作者分享 开发环境:Tomcat9.0 在使用Ajax实现R ...

  9. Django后台获取不到前端axios-post请求提交的参数的解决方法

    解决方法 用 URLSearchParams 传递参数 let param = new URLSearchParams() param.append('username', 'admin') para ...

随机推荐

  1. IOS之UITabBarController

    在学习IOS开发过程中,针对于UITabBarController的使用也不少出现,UITabBarController和UINavigationController类似,UITabBarContro ...

  2. LA 4728 Square ,旋转卡壳法求多边形的直径

    给出一些正方形.让你求这些正方形顶点之间的最大距离的平方. //返回点集直径的平方 int diameter2(vector<Point> & points) { vector&l ...

  3. Effective C++ Item 43 学习处理模板化基类内的名称

    本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie 经验:可在derived class templates 内通过 "this-&g ...

  4. Drupal 通过API动态的加入样式文件

    前面几篇文章中讲到关于样式的载入方式.已经了解到能够通过 theme.info 载入样式文件,但都须要更新缓存才干够使用.因些这样子没有办法动态的载入一些样式文件,在DP中提供了两个API操作样式文件 ...

  5. WPF代码模板-布局部分

    Grid 两行和三列 <Grid ShowGridLines="True"> <Grid.RowDefinitions> <RowDefinition ...

  6. MySQL单列索引和组合索引(联合索引)的区别详解

    发现index merge局限性,优化器会自动判断是否使用 index merge 优化技术,查询还是需要组合索引[推荐阅读:对mysql使用索引的误解] MySQL单列索引和组合索引(联合索引)的区 ...

  7. [C++设计模式]template 模板方法模式

    模板法模式:定义一个操作中的算法骨架.而将一些步骤延迟到子类中. 依照<headfirst 设计模式>的样例.煮茶和煮咖啡的算法框架(流程)是一样的.仅仅是有些算法的实现是不一样的,有些是 ...

  8. Excel还是那些事

        文章来源:刘俊涛的博客 欢迎关注,有问题一起学习欢迎留言.评论

  9. [Python]网络爬虫(七):Python中的正则表达式教程

    转自:http://blog.csdn.net/pleasecallmewhy/article/details/8929576#t4 接下来准备用糗百做一个爬虫的小例子. 但是在这之前,先详细的整理一 ...

  10. Oracle使用——PLSQL的中文乱码显示全是问号

    问题 这两天刚将PLSQL与Oracle配置好,但是在PLSQL中插入数据时.出现一个问题,PLSQL中的表里无法显示中文,中文无法保存.无法输出.中文在表中显示问号.如图: 原因 经过一番查证,发现 ...