gpt4 book ai didi

java - RestTemplate 调用外部 API 时禁止(Cloudflare 服务器)

转载 作者:行者123 更新时间:2023-12-02 02:16:27 30 4
gpt4 key购买 nike

我在 REST 服务中使用一个 REST API。当我从 Chrome 或 Postman 调用 API 时,一切正常,但当我从应用程序调用时,会返回 Forbbiden 响应。

PS:我正在使用 Java Spring Boot 项目。

测试方法:

public static void main(String[] args) {
final String uri = "https://swapi.co/api/planets?search=Alderaan";
System.out.println(new RestTemplate().getForObject(uri, String.class));
}

产品:

20:58:01.436 [main] DEBUG org.springframework.web.client.RestTemplate - HTTP GET swapi.co/api/planets?search=Alderaan 
20:58:01.461 [main] DEBUG org.springframework.web.client.RestTemplate - Accept=[text/plain, application/json, application/*+json, */*]
20:58:02.577 [main] DEBUG org.springframework.web.client.RestTemplate - Response 403 FORBIDDEN
Exception in thread "main" org.springframework.web.client.HttpClientErrorException$Forbidden: 403 Forbidden

外部API:https://swapi.co/documentation

最佳答案

当我在标题中指定一些“用户代理”时,一切正常。

这似乎是对 CloudFlare 的限制: https://support.cloudflare.com/hc/en-us/articles/200170086-What-does-the-Browser-Integrity-Check-do-

我的应用程序的用户代理是我的 Java 版本 (Java/1.8.0_151)。如果您尝试此用户代理,您将收到来自 CloudFlare 的限制访问消息。

curl :

curl -H "User-Agent: Java/1.8.0_151" https://swapi.co/api/planets/?search=Alderaan

响应:访问被拒绝| swapi.co 使用 Cloudflare 来限制访问

这段代码解决了问题:

 HttpHeaders headers = new HttpHeaders();
headers.add("user-agent", "Application");
HttpEntity<String> entity = new HttpEntity<>(headers);

String planetFound = restTemplate.exchange(findPlanetUri, HttpMethod.GET, entity, String.class).getBody();

另一种解决方案:

 String planetFound = restTemplate.getForObject(findPlanetUri, String.class);

   @Bean
public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) {
ClientHttpRequestInterceptor interceptor = (request, body, execution) -> {
request.getHeaders().add("user-agent", "Application");
return execution.execute(request, body);
};
return restTemplateBuilder.additionalInterceptors(interceptor).build();
}

关于java - RestTemplate 调用外部 API 时禁止(Cloudflare 服务器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57299899/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com