自学内容网 自学内容网

根据basic auth请求https获取token

根据basic auth请求https获取token


对接第三方接口,给了接口文档,但是没有示例代码,postman一直可请求成功,java就是不行。百思不得其解,最后请求公司大神,得到一套秘籍。

第一步

在这里插入图片描述
第二步
在这里插入图片描述
Authorization:Bearer access_token。其中,Bearer为固定字符串,后面包含一个空格,access_token表示实际获取到的token。

第三步:写出代码。


import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.spcp.platform.common.util.StringUtil;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContexts;
import org.springframework.http.*;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;

import javax.net.ssl.SSLContext;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public String getToken() {
        String token = "";
        try {
            TrustStrategy acceptingTrustStrategy = (x509Certificates, authType) -> true;
            SSLContext sslContext = SSLContexts.custom()
                    .loadTrustMaterial(null, acceptingTrustStrategy)
                    .build();
            SSLConnectionSocketFactory sslFactory = new SSLConnectionSocketFactory(
                    sslContext, new NoopHostnameVerifier());

            CloseableHttpClient httpClient = HttpClients.custom()
                    .setSSLSocketFactory(sslFactory)
                    .build();

            HttpComponentsClientHttpRequestFactory factory =
                    new HttpComponentsClientHttpRequestFactory();
            factory.setConnectTimeout(3600000);
            factory.setReadTimeout(3600000);

            factory.setHttpClient(httpClient);
            RestTemplate restTemplate = new RestTemplate(factory);
            // 要请求的URL
            String requestUrl = "https://110:39/oauth/token?grant_type=client_credentials";
            // header根据实际情况设置,没有就空着
            MultiValueMap<String, String> params = new HttpHeaders();
            params.add("grant_type", "client_credentials-aqjc");
            HttpHeaders headers = new HttpHeaders();
            // 加密后的用户名和密码,这个替换成加密后的
            headers.add("Authorization", "Basic d2666666666666==");
            //headers.add("Content-Type", "application/x-www-form-urlencoded");
            HttpEntity<?> requestEntity = new HttpEntity<>(params, headers);
            // 发送请求并接收响应
            ResponseEntity<String> response = restTemplate.exchange(requestUrl, HttpMethod.POST, requestEntity, String.class);
            // 获取响应体
            String responseBody = response.getBody();
            // 输出响应体内容
            Map<String, String> resMap = new ObjectMapper().readValue(responseBody, new TypeReference<Map<String, String>>() {
            });
            token = resMap.get("access_token");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return token;
    }

总结:其实挺难的,尤其https认证。


原文地址:https://blog.csdn.net/weixin_43988238/article/details/142824057

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!