http请求No peer certificate的解决方法

不少同学在做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的解决方法

时间: 2024-08-25 23:41:30

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

WebService "因 URL 意外地以 结束,请求格式无法识别" 的解决方法

问题出现的前提条件: 1.使用XMLHttpRequest向服务端发送请求,未正常返回信息 2.使用FireBug发现如标题所描述的问题 解决办法: 在WebConfig->system.web下添加webServices节点,入下所示 <webServices>          <protocols>              <add name= "HttpGet" />               <add name= "

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

对于做Java WEB项目同学来说,中文乱码问题是一个经常遇到而又非常头痛的问题,而最容易出现乱码的环节就是在浏览器向服务器发送请求的过程,至于出现乱码的原因不是本文的关注的重点,想了解的朋友可以参考 http://zhaomin819111.blog.163.com/blog/static/10659004200943112950956/ 本文主要介绍如何有效解决web请求中的乱码问题,其实解决方法有很多种,不同的请求类型解决方法也不相同. 本文只介绍最方便的一种: 1.针对Post方式提交的

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

本文装载自:http://blog.csdn.net/u012737182/article/details/52831008    感谢原文作者分享 开发环境:Tomcat9.0 在使用Ajax实现Restful的时候,有时候会出现无法Put.Delete请求参数无法传递到程序中的尴尬情况,此时我们可以有两种解决方案:1.使用地址重写的方法传递参数.2.配置web.xml项目环境. 测试的程序为: @RequestMapping(value = "/member", method =

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

首先我们来看看容器如何找到service()方法?(1)当在浏览器中输入 http://localhost:8080/firstweb/sayHi 这个地址后,容器是如何找到 HelloServlet.class这个文件并执行的呢?(2)首先容器会根据firstweb这个应用名找到位于webapps下面对应的文件夹, (3)然后根据地址中的“/sayHi”到web.xml文件中寻找与之匹配的<url-pattern>节点,找到匹配的节点后会找到与该节点紧邻的<servlet-name&g

NGINX反向代理对HTML页面的POST请求返回405状态码解决方法

实现如下: server {     listen 80;     listen 443 ssl;     server_name nirvana.test-a.gogen;     ssl_certificate      /etc/nginx/ssl/nirvana.test-a.gogen.crt;     ssl_certificate_key  /etc/nginx/ssl/nirvana.test-a.gogen.key;     proxy_connect_timeout 600;

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

微信小程序使用wx.request API请求豆瓣公开api的时候,会报一个403(Forbidden)的错误.这是为什么呢?是由于来自小程序的调用过多,豆瓣来自于小程序的调用被禁止.这里收集以下三种方法解决此问题(设置代理): 1.使用 https://douban.uieee.com 2.使用 https://www.zhihu.com/question/265806694/answer/302894881 以上两种方法均是设置代理请求豆瓣API数据. 使用方法:把 https://www.

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

解决方法 用 URLSearchParams 传递参数 let param = new URLSearchParams() param.append('username', 'admin') param.append('pwd', 'admin') axios({ method: 'post', url: '/api/lockServer/search', data: param }) 参考文章:https://blog.csdn.net/csdn_yudong/article/details/

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

1.针对Post方式提交的请求如果出现乱码,可以每次在request解析数据时设置编码格式: 也可以使用编码过滤器来解决,最常用的方法是使用Spring提供的编码过滤器,在Web.xml中增加如下配置(要注意的是它的位置一定要是第一个执行的过滤器): <filter> <filter-name>charsetFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterE

Firefox 打开谷歌页面提示“检测到该服务器正在将此地址的请求循环重定向”的完美解决方法 (转)

尝试:在火狐地址栏打开 about:config,过滤器"搜索"栏里输入 keyword.URL, 未找到该项 输入https://www.google.com 可以打开  那么把以下设为主页就可以了 https://www.google.com.hk/search?ie=UTF-8&oe=UTF-8&sourceid=navclient&gfns=1&q= 本文适用于Firefox浏览器,Chrome.猎豹等相关的方法请参见http://blog.si