2012-01-07 6 views
1

Я использую JTidy для разбора HTML-страниц для извлечения ссылок на страницы. Я тестировал его на нескольких веб-страницах, один из них был www.support.xbox.com. Некоторые ссылки показывают: 80 в URL, например.Разбор HTML для получения веб-ссылок, некоторые ссылки показывают: 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; 
} 
} 
+0

** 80 ** - номер порта для ** http ** протокола так же, как ** 443 ** для ** https ** –

+0

Но почему он будет отображаться для ссылок на этом сайте и других сайтах? – Peck3277

+1

Сам сайт содержит такие «: 80» (по любой причине) в URL-адресах в этом случае. Элементы ссылок обрабатываются буквально, так что ни один указатель порта не добавляется и не удаляется, поэтому спросите владельцев сайтов. И почему это помечено «jtidy»? –

ответ

2

Если вы идете в браузере и типа

www.stackoverflow.com

или

www.stackoverflow.com:80

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

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

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 

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

Что касается того, почему сайт опубликовал переадресацию с явным: номер порта 80, который по умолчанию должен быть по умолчанию, вам придется спросить владельца сайта.

 Смежные вопросы

  • Нет связанных вопросов^_^