请求第三方https接口

  1. 生成证书
    根据第三方提供的.cer证书,我们可以用JDK的keytool工具生成keystore密钥库文件
    a. keytool -import -v -file E:\cer\esb.*****-p.com.cn.cer -keystore F:tomcat.keystor

    b. 输入密码(自己给的密码)

    c.回车提示是否信任此证书(y信任)

  2. 代码请求https接口

    public static String httpsPost(String url, String json) {
    InputStream inputStream = null;
    String jsonString = "";
    try {
    DefaultHttpClient client = new DefaultHttpClient();
    CloseableHttpClient httpClient = HttpClients.createDefault();
    client.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY);
    client.getParams().setParameter(CoreProtocolPNames.USER_AGENT,
    " Mozilla/5.0 (Windows NT 6.2; rv:18.0) Gecko/20100101 Firefox/18.0");

     	// 获得密匙库
     	KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
     	ClassPathResource resource = new ClassPathResource("tomcat.keystore");
    
     	// 获取输入流
     	inputStream = resource.getInputStream();
    
     	// 密匙库的密码
     	trustStore.load(inputStream, "123456".toCharArray());
    
     	// 注册密匙库
     	SSLSocketFactory socketFactory = new SSLSocketFactory(trustStore);
    
     	// 不校验域名
     	socketFactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
     	Scheme sch = new Scheme("https", 443, socketFactory);
     	client.getConnectionManager().getSchemeRegistry().register(sch);
    
     	HttpPost httppost = new HttpPost(url);
     	StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
     	httppost.setEntity(entity);
    
     	// 发起请求
     	HttpResponse response = client.execute(httppost);
    
     	// 获取响应
     	HttpEntity resEntity = response.getEntity();
     	jsonString = EntityUtils.toString(resEntity, "utf-8");
     } catch (Exception e) {
     	e.printStackTrace();
     } finally {
     	try {
     		inputStream.close();
     	} catch (IOException e) {
     		e.printStackTrace();
     	}
     }
     return jsonString;
    

    }

posted @ 2018-12-28 11:09  兔儿面  阅读(571)  评论(0编辑  收藏  举报