我正在创建一个需要从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", "");

09-13 06:42