我正在使用JTidy解析HTML页面以提取页面链接。我在几个网页上测试它,其中一个是www.support.xbox.com。一些链接在URL中显示:80,例如
http://support.xbox.com:80/en-US/xbox-360/disc-drive/disc-replacement-program http://support.xbox.com:80/en-US/xbox-live/marketplace-and-purchasing/play-xbox-live-content http://support.xbox.com:80/en-US/games/call-of-duty/call-of-duty-elite-subscription
我认为: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;
}
}
答案 0 :(得分:2)
如果您使用浏览器并输入
www.stackoverflow.com
或
www.stackoverflow.com:80
你会得到相同的结果。因为浏览器隐式地将:80添加到代表http请求的端口号的所有地址。
现在为什么有些网站会添加它而有些网站没有,这取决于很多问题。但毕竟,它不会以任何方式影响你的程序
答案 1 :(得分:1)
如果您注意到重定向标题:
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中的Location:
字段包含端口号。这就是为什么在直接访问页面时没有获得端口号,而在通过重定向访问页面时获得端口号。
至于为什么网站发布了一个带有显式:80端口号的重定向,无论如何都应该是默认端口号,你必须询问网站所有者。