请求第三方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  兔儿面  阅读(591)  评论(0)    收藏  举报