• 调用第三方https接口


    1.
    package com.huawei.irs.common.domain;

    import java.security.cert.CertificateException;
    import java.security.cert.X509Certificate;
    import javax.net.ssl.SSLContext;
    import javax.net.ssl.TrustManager;
    import javax.net.ssl.X509TrustManager;
    import org.apache.http.conn.ClientConnectionManager;
    import org.apache.http.conn.scheme.Scheme;
    import org.apache.http.conn.scheme.SchemeRegistry;
    import org.apache.http.conn.ssl.SSLSocketFactory;
    import org.apache.http.impl.client.DefaultHttpClient;

    /**
    * 用于进行Https请求的HttpClient
    * @since 2019-10-15
    */
    public class SSLClient extends DefaultHttpClient {
    public SSLClient() throws Exception {
    super();
    SSLContext ctx = SSLContext.getInstance("TLS");
    X509TrustManager tm = new X509TrustManager() {
    @Override
    public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
    }

    @Override
    public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
    }

    @Override
    public X509Certificate[] getAcceptedIssuers() {
    return null;
    }
    };
    ctx.init(null, new TrustManager[] {tm}, null);
    SSLSocketFactory ssf = new SSLSocketFactory(ctx, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
    ClientConnectionManager ccm = this.getConnectionManager();
    SchemeRegistry sr = ccm.getSchemeRegistry();
    sr.register(new Scheme("https", 443, ssf));
    }
    }

    2.

    package com.huawei.irs.common.util;

    import java.util.Base64;

    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.message.BasicHeader;
    import org.apache.http.util.EntityUtils;

    import com.huawei.irs.common.constants.Constants;
    import com.huawei.irs.common.domain.SSLClient;
    import com.huawei.irs.common.encrypt.SHA256Encoder;

    /**
    * 利用HttpClient进行post请求的工具类
    * @since 2019-10-15
    */
    public class HttpClientUtil {
    @SuppressWarnings("resource")
    public static String doPost(String url,String jsonstr,String charset){
    HttpClient httpClient = null;
    HttpPost httpPost = null;
    String result = null;
    try{
    httpClient = new SSLClient();
    httpPost = new HttpPost(url);
    httpPost.addHeader("Content-Type", "application/json");
    long localTimestamp = System.currentTimeMillis();
    String timestamp = String.valueOf(localTimestamp);
    String appId = Constants.SynchronizeIvopUser.IRS;
    String username = "";
    String appKey = Constants.SynchronizeIvopUser.APPKEY;
    // 签名
    String sign = getSign(appId, timestamp, username, appKey);
    // 设置调用接口所需的参数
    httpPost.addHeader("appid", appId);
    httpPost.addHeader("timestamp", timestamp);
    httpPost.addHeader("username", "");
    httpPost.addHeader("sign", sign);
    StringEntity se = new StringEntity(jsonstr);
    se.setContentType("text/json");
    se.setContentEncoding(new BasicHeader("Content-Type", "application/json"));
    httpPost.setEntity(se);
    HttpResponse response = httpClient.execute(httpPost);
    if(response != null){
    HttpEntity resEntity = response.getEntity();
    if(resEntity != null){
    result = EntityUtils.toString(resEntity,charset);
    }
    }
    }catch(Exception ex){
    ex.printStackTrace();
    }
    return result;
    }

    /**
    * 获取签名
    * @return 签名
    */
    private static String getSign(String appId, String timestamp, String username, String appKey){
    String validStr = appId + username + timestamp + appKey;
    // SHA256签名
    byte[] encodeBytes = SHA256Encoder.encode(validStr);
    String localSign = null;
    if (encodeBytes != null) {
    localSign = Base64.getEncoder().encodeToString(encodeBytes);
    }
    return localSign;
    }
    }

    历经苦难而不厌,此乃阿修罗之道。
  • 相关阅读:
    为什么一个字节可以表示的有符号整数的范围是-128~+127?
    redis入门指南(一) ——简介及入门相关
    C Primer Plus(二)
    lua程序设计(一)
    证明:S = 1 + 1/2 + 1/4 + 1/8 + 1/16 + ·······,求证 S = 2
    C Primer Plus (一)
    C语言打印年历
    Spring IoC 自定义标签解析
    CentOS 7 Nacos 集群搭建
    CentOS 7 Zookeeper 和 Kafka 集群搭建
  • 原文地址:https://www.cnblogs.com/echo1314/p/11688599.html
Copyright © 2020-2023  润新知