Estoy escribiendo un pequeño programa en Java que hace una llamada de descanso a un punto final para verificar una identificación de referencia. He escrito este programa de dos maneras diferentes y cada trabajo cuando lo funciono de mi PC pero cuando despliego el archivo jar en la prueba Linux CentOs Server
, aparece un 403 forbidden error
desde el punto final, así que pensé que tal vez la IP fue bloqueada y luego tratado lo mismo con el enrollamiento y funcionó perfectamente.
¿Cual podría ser el problema? no podía ser de error de la versión certificado SSL?
Camino 1:
public String sendGet(String id) {
restTemplate = new RestTemplate();
log.info("Authorization :::: {}", "Bearer " + this.getApiAuth());
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", "Bearer " + this.getApiAuth());
List<MediaType> acceptableMediaTypes = new ArrayList<>();
acceptableMediaTypes.add(MediaType.APPLICATION_JSON);
headers.setAccept(acceptableMediaTypes);
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> httpRequestEntity = new HttpEntity<>(headers);
ResponseEntity<String> exchange = getRestTemplate().exchange(this.getUrl() + id, HttpMethod.GET, httpRequestEntity, String.class);
log.info("Status Code :::: {}", exchange.getStatusCode());
log.info("Status Code :::: {}", exchange.getBody());
return exchange.getBody();
}
Vía 2:
public String sendGet(String message) throws Exception {
infoLogger.info("GOING HERE " + url + message);
java.lang.System.setProperty("https.protocols", "TLSv1,TLSv1.1,TLSv1.2");
URL obj = new URL(url + message);
HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
con.setRequestMethod("GET");
infoLogger.info("Setting Authorization: Bearer " + this.getApiAuth());
con.setRequestProperty("Authorization", "Bearer " +this.getApiAuth());
con.setRequestProperty("Content-Type", MediaType.APPLICATION_JSON_VALUE);
con.setRequestProperty("accept", MediaType.APPLICATION_JSON_VALUE);
int responseCode = con.getResponseCode();
infoLogger.info("\nSending 'GET' request to URL : " + url);
infoLogger.info("Response Code : " + responseCode);
BufferedReader in = null;
String inputLine;
StringBuilder response = new StringBuilder();
if ((200 <= con.getResponseCode()) && (con.getResponseCode() <= 299)) {
if (con.getInputStream() != null) {
in = new BufferedReader(new InputStreamReader(con.getInputStream()));
}
} else if (con.getErrorStream() != null) {
in = new BufferedReader(new InputStreamReader(con.getErrorStream()));
} else {
infoLogger.info("GOT NOTHING ");
}
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
//print result
System.out.println(response.toString());
return response.toString();
}
Así que hice una .getResponseMessage
que se le preguntó y me dio el siguiente error:
Acceso denegado | api.paystack.co utiliza para restringir Cloudflare accessbody {margin: 0; padding: 0} Por favor, activa las cookies.
Error 1010 Ray ID: 26/01/2019 07:12:17 • 49f12b9b9bb6c5fa UTC
Acceso denegado ¿Qué pasó?El propietario de este sitio web (api.paystack.co) ha prohibido el acceso al usuario basado en la firma (49f12b9b9bb6c5fa-UA21) de su navegador.
Cloudflare Ray ID: 49f12b9b9bb6c5fa • Su IP: 104.248.9.123 • Rendimiento y seguridad mediante la Cloudflare
window._cf_translation = {}; `
El supplyer del servicio que está intentando acceder está utilizando CloudFlare. Están utilizando algún tipo de comprobación de integridad del navegador (ver https://support.cloudflare.com/hc/en-us/articles/200171806-Error-1010-The-owner-of-this-website-has-banned-your -Acceso a base-a-su-navegador-s-firma ).
Se puede cambiar la firma en el código Java:
con.setRequestProperty("User-Agent", "My own REST client");
Usted parece usar un JDK diferente en su PC que en su servidor CentOS, por lo que las firmas del Java HttpsURLConnection son diferentes. Son, por supuesto, diferente de rizo.