确定URL是否应该在Java的末尾具有正斜杠

时间:2012-11-06 11:04:56

标签: java url relative-url

我正在尝试进行一些网络抓取,但我遇到了何时添加斜杠的问题。我知道有些网站最终会有它,而有些则没有,但在浏览器中输入错误的网站只会将您重定向到正确的网站。规范化会在结尾处添加斜杠,但在尝试将相对URL转换为绝对时会导致问题。

例如,如果用户选择绝对网址http://stack.com/more,但实际(重定向)网址为http://stack.com/more/且相对网址为index.html

然后执行URL newurl = new URL(url, relativeURL);

产生http://stack.com/index.html(不存在的页面)

实际应该是http://stack.com/more/index.html(真实页面)

Doese有谁知道在最后正确追加斜线的好方法?

1 个答案:

答案 0 :(得分:4)

如果相对URL以/开头,则仅相对于根(域)。所以两者

http://stack.com/more/ + /index.html

http://stack.com/more + /index.html

正确解析为

http://stack.com/index.html

<强>不

http://stack.com/more/index.html

在您的示例中,/末尾是否有more没有任何区别。

当相对URL上没有前导斜杠时,诀窍就会出现,例如: index.html。解析它们时,您应该删除最后一个段并将其替换为相对路径。在这种情况下会有所不同,因为

http://stack.com/more/ + index.html

解析为

http://stack.com/more/index.html

http://stack.com/more + index.html

解析为

http://stack.com/index.html

index.html取代more,因为more是最后一段。)