我正在创建一个需要从Web服务获取答案的应用程序,该响应作为json对象。我已经在浏览器上测试了URL,它工作得很好,但是使用Java(J2SE)则不起作用,并从服务器抛出异常451。
我不知道为什么它不能在浏览器上运行,而不能在j2se上运行,以及如何修复它。
我该如何解决?
网址:https://economia.awesomeapi.com.br/all/USD-BRL
例外
Server returned HTTP response code: 451 for URL: https://economia.awesomeapi.com.br/all/USD-BRL
方法
public void getJsonFromURL(){
try{
URL u = new URL("https://economia.awesomeapi.com.br/all/USD-BRL");
HttpURLConnection c = (HttpURLConnection) u.openConnection();
c.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
c.setRequestProperty("Accept", "application/json");
c.setRequestProperty("access-control-allow-origin", "*");
c.setRequestProperty("server", "keycdn-engine");
c.setRequestMethod("GET");
c.setDoOutput(true);
c.setDoInput(true);
c.connect();
int status = c.getResponseCode();
System.out.println("Code Response: " + status);
//Exception
Server returned HTTP response code: 451 for URL: https://economia.awesomeapi.com.br/all/USD-BRL
}catch(Exception e){
System.out.println("Erro: " + e.getLocalizedMessage());
}
}
最佳答案
似乎我找到了,如果用户代理标头不存在,服务器不喜欢。下面的请求给了我一个结果。即使参数没有值,也可以接受。
由于建立了连接并且服务器实际上已答复,因此我不能遇到任何certificate / ssl / tls问题,只是不太喜欢该请求。这行做到了:
con.setRequestProperty("User-Agent", "");