Java 解析HTML以获取web链接,有些链接在URL中显示:80。为什么会这样?

Java 解析HTML以获取web链接,有些链接在URL中显示:80。为什么会这样?,java,port,jsoup,Java,Port,Jsoup,我使用JTidy解析HTML页面以提取页面链接。我在几个网页上测试它,其中一个是www.support.xbox.com。一些链接在URL中显示:80,例如 http://support.xbox.com:80/en-美国/xbox live/市场和购买/播放xbox live内容 我假设:80表示正在使用的端口,但为什么是这样 不确定是否需要我的代码,但无论如何它在这里 package urltest; import org.jsoup.Jsoup; import org.jsoup.h

我使用JTidy解析HTML页面以提取页面链接。我在几个网页上测试它,其中一个是www.support.xbox.com。一些链接在URL中显示:80,例如

http://support.xbox.com:80/en-美国/xbox live/市场和购买/播放xbox live内容

我假设:80表示正在使用的端口,但为什么是这样

不确定是否需要我的代码,但无论如何它在这里

package urltest;

import org.jsoup.Jsoup;
import org.jsoup.helper.Validate;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.IOException;
import org.jsoup.Connection;

public class UrlTest {

public static void main(String[] args) throws IOException {
    String url = "http://support.xbox.com";
    print("Fetching %s...", url);

    Document doc = Jsoup.connect(url).timeout(0).get();
    Elements links = doc.select("div#BodyContent a[href]");

    print("\nLinks: (%d)", links.size());
    for (Element link : links) {
        print("%s  (%s)", link.attr("abs:href"), trim(link.text(), 35));
    }
}

private static void print(String msg, Object... args) {
    System.out.println(String.format(msg, args));
}

private static String trim(String s, int width) {
    if (s.length() > width)
        return s.substring(0, width-1) + ".";
    else
        return s;
}
}

如果你在浏览器上输入

www.stackoverflow.com

www.stackoverflow.com:80

你会得到同样的结果。因为浏览器会向所有表示http请求端口号的地址隐式添加:80


现在为什么有些网站会添加它,而有些网站不会,这取决于很多问题。但毕竟,如果您注意到重定向头,它不会以任何方式影响您的程序:

HTTP/1.1 302 Moved Temporarily
Cache-Control: private
Location: http://support.xbox.com:80/en-US/
Server: Microsoft-IIS/7.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Content-Length: 0
Date: Sun, 08 Jan 2012 00:19:43 GMT
Connection: keep-alive
请注意,URL中的
位置:
字段包含端口号。这就是为什么在直接访问页面时无法获取端口号,而在通过重定向访问页面时却获取端口号的原因


至于为什么网站会发出一个带有明确的:80端口号的重定向,这应该是默认的,你必须询问网站所有者。

80是http协议的端口号,就像443是HTTPS的端口号一样,但是为什么它会出现在这个网站的链接上而没有其他网站?网站本身包含这样的:80”(无论出于什么原因)在这种情况下,在URL中。链接元素是按字面意思处理的,因此没有添加或删除端口指示符——所以请询问站点所有者。为什么这个标签是“jtidy”?(没有这样的“问题”,所以它可能只是一些地区性的页面?)我在使用这个库时将它标记为jtidy,我不确定这是否是插件的一个怪癖。在测试了www.support.xbox.com/en-us而不是www.support.xbox.com之后,我在URL中没有得到任何:80。这不是一个重要的问题,我只是想知道为什么他们都是同一个页面,www.support.xbox.com只是重定向到www.support.xbox.com/en-us?