Анализируя HTML для получения веб-ссылок, некоторые ссылки показывают: 80 в URL. Почему это? - PullRequest
1 голос
/ 08 января 2012

Я использую JTidy для разбора HTML-страниц, чтобы извлечь ссылки на страницы. Я тестировал его на нескольких веб-страницах, одной из которых была www.support.xbox.com. Некоторые ссылки показывают: 80 в URL, например

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;
}
}

Ответы [ 2 ]

2 голосов
/ 08 января 2012

Если вы заходите в браузер и набираете

www.stackoverflow.com

или

www.stackoverflow.com: 80

вы получите тот же результат. Поскольку браузер неявно добавляет: 80 ко всем адресам, которые представляют номер порта для http-запроса.

Теперь, почему некоторые сайты добавляют его, а некоторые нет, это зависит от многих проблем. Но ведь это никак не повлияет на вашу программу

1 голос
/ 08 января 2012

Если вы заметили заголовок перенаправления:

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

, обратите внимание, что поле Location: в URL содержит номер порта.Вот почему вы не получаете номер порта при непосредственном посещении страницы, в то время как вы получаете номер порта при посещении страницы через редирект.номер порта, который должен быть по умолчанию в любом случае, вам нужно спросить владельца сайта.

...