java.net.MalformedURLException: no protocol: 但 URL 很好,该方法适用于其他 GET 请求

时间:2021-06-27 20:10:49

标签: java http servlets get

我写了以下代码:

public String sendGet(String url) throws Exception {
        HttpURLConnection httpClient = (HttpURLConnection) new URL(url).openConnection();
        httpClient.setRequestMethod("GET");
        int responseCode = httpClient.getResponseCode();
        try (BufferedReader in = new BufferedReader(
                new InputStreamReader(httpClient.getInputStream()))) {
            StringBuilder response = new StringBuilder();
            String line;
            while ((line = in.readLine()) != null) {
                response.append(line);
            }
            return response.toString();
        }
}

它非常适合我的 GET 请求,但不适用于这个: https://www.lichess.org/api/user/{USERNAME}

如果我发送它,我会收到以下错误:

PM org.apache.catalina.core.StandardWrapperValve 调用 SCHWERWIEGEND:servlet [dispatcherServlet] 的 Servlet.service() 在路径 [] 的上下文中引发异常 java.net.MalformedURLException:无协议:{预期响应}

预期的响应在错误消息中。

我从 lichess.org 将此 GET 请求发送到外部 API,并且我尝试使用 Postman 并在我的浏览器中请求该请求并且它工作正常。问题一定出在我的代码中。 (使用 Java 8 和 java.net)很奇怪,有时它可以工作,有时却不起作用。

你知道该怎么做吗?

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我认为这是具体情况。浏览器中的 URL https://lichess.org/api/user/{georges} 效果不佳,而 https://lichess.org/api/user/georges 可以(没有 {})。与您的代码片段相同。

谢谢, -尼尔。

答案 1 :(得分:0)

不允许在 URL 中使用大括号。

它们有时用于 URI 模板中的变量名称,您的示例 URL 确实如此。因此,“{USERNAME}”可能需要替换为 ... 用户名,执行此操作时,需要删除括号。