Почему urllib2.urlopen не может открывать такие страницы, как "http://localhost/new-post#comment-29"? - PullRequest
2 голосов
/ 26 сентября 2010

Мне любопытно, почему я получаю ошибку 404 при выполнении этой строки:

urllib2.urlopen("http://localhost/new-post#comment-29")

Пока все отлично работает серфинг http://localhost/new-post#comment-29 в любом браузере ...

Метод urlopen не анализирует URL с "#" в нем?

Кто-нибудь знает?

1 Ответ

7 голосов
/ 26 сентября 2010

В протоколе HTTP фрагмент (начиная с # и далее) не отправляется на сервер через сеть: он локально сохраняется браузером и используется после получения полного ответа сервера для «визуального определения местоположения». точное место на странице, которое будет отображаться как «текущее» (например, если возвращенная страница находится в HTML, это будет сделано путем анализа HTML и поиска первого подходящего флага <a>).

Итак, процедура такова: удалите фрагмент, например. через urlparse.urlparse; используйте остальное, чтобы получить ресурс; проанализировать его соответствующим образом на основе заголовка типа содержимого ответа сервера; затем выполните все визуальные действия, которые ваша программа выполняет в отношении «текущей точки» на ресурсе, основываясь на том, что в проанализированном ресурсе находится фрагмент, который вы сохранили на первом шаге.

...