没有协议(protocol)的 Java URL

标签 java url inputstream

我正在尝试打开一个到服务 API 指定的特定 URL 的输入流。但是,它没有一套协议(protocol)(不是 http 或 https),如果没有协议(protocol),我会收到以下错误。

有没有办法在没有协议(protocol)的情况下获取请求?

异常:

Exception in thread "main" java.net.MalformedURLException: no protocol.

代码:

    String url = "maple.fm/api/2/search?server=1";
    InputStream is = new URL(url).openStream();

更新:我现在将代码更新为:

代码:

    String url = "http://maple.fm/api/2/search?server=1";
    InputStream is = new URL(url).openStream();

现在我收到以下错误:

异常:

Exception in thread "main" java.io.IOException: Server returned HTTP response code: 403 for URL: http://maple.fm/api/2/search?server=1

最佳答案

没有协议(protocol)的 URL 不是有效的 URL。它实际上是一个相对 URI,如果您有绝对 URI(或等效的)来提供解析它的上下文,则只能使用相对 URI。

Is there any way to [make] a request without a protocol?

基本上......不。协议(protocol)告诉客户端库如何执行请求。如果没有协议(protocol),图书馆将不知道该怎么做。

“没有协议(protocol)的 url”在网络浏览器的 URL 栏中起作用的原因是浏览器很有帮助,并用“http:”填充缺少的协议(protocol)...假设这就是什么用户可能意味着。 (加上一大堆其他的东西,比如添加“www.”,添加“.com”,转义空格和其他非法字符,......或者尝试搜索而不是正常的 HTTP GET 请求。)

现在,在将 URL 字符串传递给 URL 类之前,您可以尝试在代码中执行相同的操作。但在我看来,如果您正在编写与服务通信的代码,正确的解决方案就是修复 URL。将正确的协议(protocol)放在前面...


403您现在收到的错误意味着禁止。服务器说“您不允许这样做”。

检查您尝试使用的服务的文档。 (也许您需要执行某种登录程序。也许您尝试执行的操作仅允许某些用户或其他用户执行。)

尝试 this page 上的示例 URL ...这恰好可以通过我的网络浏览器对我起作用。

关于没有协议(protocol)的 Java URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22740582/

相关文章:

java - 读取资源最终为空

inputstream - Linux 设备驱动程序调用时计数错误

java - Spring安全失败JdbcClientDetailsS​​ervice错误

java - 列表数组输出和 IBM 的 Watson Java SDK

java - 如何在TitledBorder中找到标题的x位置

php - 来自多个 url 的 file_get_contents

javascript - 是否有 "special"URL 参数强制 SWFObject 显示替代内容?

java - getResourceAsStream 为 txt 文件返回 null 但对图像有效

java - 简单工厂和工厂方法设计模式的区别

javascript - 如何通过 javascript 将所有 href 链接附加到重定向器 url