为了账号安全,请及时绑定邮箱和手机立即绑定

我可以使用 Spring Boot 使用别人的 API 发出请求吗?

我可以使用 Spring Boot 使用别人的 API 发出请求吗?

墨色风雨 2023-06-28 16:10:06
我对 Spring 很陌生,我正在尝试理解它。我可以使用Spring boot来调用别人的api吗?例如,我使用的 api 需要使用他们给我的凭据进行身份验证。我想使用他们的 API 来发出 POST 请求。到目前为止,我已经找到了与使用您自己的 API 相关的文档。这些请求还需要传递标头。我可以使用 Spring 传递我的凭据和所需标头来执行 POST 请求的最简单方法是什么?任何帮助,将不胜感激。
查看完整描述

3 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

如果我很了解你,你需要发布另一个带有凭据的网络API,你可以使用


RestTemplate 就像下面的例子

 public List<EtisAccount> getAllActiveAccount(){

        logger.debug("Debug: in Class \t"+this.getClass().getName()+" Method Name is: \t"+new Object() {}.getClass().getEnclosingMethod().getName());

        Properties sprinklrProp=sprinklrProperties.getSprinklrKeys();

        SprinklrCredential sprinklrCredential=credentialBuilder.getSprinklrCredential();

        RestTemplate restTemplate= new RestTemplate();

        HttpHeaders header = new HttpHeaders();

        header.setBearerAuth(sprinklrCredential.getAccess_token());

        header.add("key", sprinklrCredential.getApi_key());

        header.set("Accept", MediaType.APPLICATION_JSON_UTF8_VALUE);

        UriComponentsBuilder uriBuilder= UriComponentsBuilder.fromUriString(sprinklrProp.getProperty("sprinlrUri").toString())

                .queryParam("types", sprinklrProp.getProperty("accountTypes").toString());

        HttpEntity<String> entity= new HttpEntity<>(header);

        sslCertificateValidation.disable();

        ResponseEntity<String> sprinklrResponse=restTemplate.exchange(uriBuilder.toUriString(),HttpMethod.GET,entity,  String.class);

        List<EtisAccount> activeAccouts=etisAccountHelper.getAllSocialEtisAccounts(sprinklrResponse.getBody());

        logger.debug(String.valueOf(sprinklrResponse.getStatusCodeValue()));

        logger.debug(activeAccouts.toString());

        return activeAccouts;

    }


这是使用 RestTemplate 调用在线 API 的示例


在这里我用凭据构建标头(不记名身份验证)


        HttpHeaders header = new HttpHeaders();

        header.setBearerAuth(sprinklrCredential.getAccess_token());

        header.add("key", sprinklrCredential.getApi_key());

        header.set("Accept", MediaType.APPLICATION_JSON_UTF8_VALUE);


在这里我添加标头 requestEntity 以添加到 Resttemplate 请求


     HttpEntity<String> entity= new HttpEntity<>(header);

在这里我使用交换方法得到响应


   ResponseEntity<String> sprinklrResponse=restTemplate.exchange(uriBuilder.toUriString(),HttpMethod.POST,entity,  String.class);



查看完整回答
反对 回复 2023-06-28
?
大话西游666

TA贡献1817条经验 获得超14个赞

你需要以下东西:

  1. 从https://start.spring.io/创建一个 Spring Web 入门项目

  2. 在项目中创建一个新的 Java 类并为其命名Controller@RestController在类级别添加注释。

  3. 在SpringBootApplication中配置RestTemplate对象

  4. 在类中自动装配该RestTemplate对象Controller

  5. 在类中创建一个方法Controller,使用RestTemplate,将调用@PostMapping他们的 API。


查看完整回答
反对 回复 2023-06-28
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

  • 你可以尝试这个方法

  • 这是简单的方法

  • 您可以将用户名和密码设置为基本身份验证

  public class RESTInvoker {

        private final String baseUrl;

        private final String username;

        private final String password;


        public RESTInvoker(String baseUrl, String username, String password) {

            this.baseUrl = baseUrl;

            this.username = username;

            this.password = password;

        }




        String getDataFromServer(String path) {

            StringBuilder sb = new StringBuilder();

            try {

                URL url = new URL(baseUrl + path);

                URLConnection urlConnection = setUsernamePassword(url);

                BufferedReader reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));

                String line;

                while ((line = reader.readLine()) != null) {

                    sb.append(line);

                }

                reader.close();


                return sb.toString();

            } catch (Exception e) {

                throw new RuntimeException(e);

            }

        }


        private URLConnection setUsernamePassword(URL url) throws IOException {

            URLConnection urlConnection = url.openConnection();

            String authString = username + ":" + password;

            String authStringEnc = new String(Base64.encodeBase64(authString.getBytes()));

            urlConnection.setRequestProperty("Authorization", "Basic " + authStringEnc);

            return urlConnection;

        }

    }


查看完整回答
反对 回复 2023-06-28
  • 3 回答
  • 0 关注
  • 185 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信