2 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超9個(gè)贊
當(dāng)我在標(biāo)頭中指定一些“用戶代理”時(shí),一切正常。
它似乎是對 CloudFlare 的限制: https://support.cloudflare.com/hc/en-us/articles/200170086-What-does-the-Browser-Integrity-Check-do-
我的應(yīng)用程序的用戶代理是我的 Java 版本 (Java/1.8.0_151)。如果您嘗試使用此用戶代理,您將收到來自 CloudFlare 的限制訪問消息。
卷曲:
curl -H "User-Agent: Java/1.8.0_151" https://swapi.co/api/planets/?search=Alderaan
響應(yīng):訪問被拒絕 | 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();
另一個(gè)解決方案:
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();
}

TA貢獻(xiàn)1943條經(jīng)驗(yàn) 獲得超7個(gè)贊
您的代碼實(shí)際上對我有用:
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));
}
輸出是:
01:20:49.564 [main] DEBUG org.springframework.web.client.RestTemplate - HTTP GET https://swapi.co/api/planets?search=Alderaan
01:20:49.573 [main] DEBUG org.springframework.web.client.RestTemplate - Accept=[text/plain, application/json, application/*+json, */*]
01:20:51.177 [main] DEBUG org.springframework.web.client.RestTemplate - Response 200 OK
01:20:51.179 [main] DEBUG org.springframework.web.client.RestTemplate - Reading to [java.lang.String] as "application/json"
{"count":1,"next":null,"previous":null,"results":[{"name":"Alderaan","rotation_period":"24","orbital_period":"364","diameter":"12500","climate":"temperate","gravity":"1 standard","terrain":"grasslands, mountains","surface_water":"40","population":"2000000000","residents":["https://swapi.co/api/people/5/","https://swapi.co/api/people/68/","https://swapi.co/api/people/81/"],"films":["https://swapi.co/api/films/6/","https://swapi.co/api/films/1/"],"created":"2014-12-10T11:35:48.479000Z","edited":"2014-12-20T20:58:18.420000Z","url":"https://swapi.co/api/planets/2/"}]}
也許你在一分鐘或一小時(shí)內(nèi)向服務(wù)發(fā)送了太多請求,他們已經(jīng)開始阻止你的 IP / 用戶代理或其他任何東西。
添加回答
舉報(bào)