不少同学在做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. HDOJ-3785 寻找大富翁(优先队列)

    寻找大富翁 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  2. GO语言基础之struct

    结构struct 1. Go 中的struct与C中的struct非常相似,并且Go没有class 2. 使用 type <Name> struct{} 定义结构,名称遵循可见性规则(即首 ...

  3. Druid对比Elasticsearch

    我们不是Elasticsearch的专家, 如果描绘有误, 请通过邮件列表或者其他途径告知我们. Elasticsearch 是基于Apache Lucene搜索服务器.  提供了对无模式文档的全文检 ...

  4. Java--解压缩zip包

    Test.java import java.io.IOException; public class Test { public static void main(String[] args) thr ...

  5. textarea光标移到末尾兼容ie,ffchrome

    function moveEnd(obj){         obj.focus();         var len = obj.value.length;         if (document ...

  6. 在Win7上安装MySql5.2遇到Write configuration file的解决

    机器从XP翻新到Win7后,原有的环境也被清除了,因此找了个时间重新安装MySql. 以前轻车熟路的过程,在最后一环却卡住了,出现Write configuration file 错误. 以前从来没有 ...

  7. SqlServer 之 用 IP 地址连接数据库报错" 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误 "

    问题描述:       在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (p ...

  8. cd命令(转)

    原文地址:http://www.cnblogs.com/peida/archive/2012/10/24/2736501.html Linux cd 命令可以说是Linux中最基本的命令语句,其他的命 ...

  9. PowerMock介绍

    一.为什么要使用Mock工具 在做单元测试的时候,我们会发现我们要测试的方法会引用很多外部依赖的对象,比如:(发送邮件,网络通讯,远程服务, 文件系统等等). 而我们没法控制这些外部依赖的对象,为了解 ...

  10. vb sendmessage 详解1

    SendMessage函数的常用消息及其应用(有点长,希望能对大家有所帮助)函数原型: Declare Function SendMessage Lib "user32" Alia ...