Warum urllib2.urlopen nicht öffnen können Seiten wie „http: // localhost / new-post # comment-29“?

StackOverflow https://stackoverflow.com/questions/3798422

Frage

Ich bin gespannt, wie komme ich bekommen 404 Fehler diese Zeile ausgeführt wird:

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

Während alles funktioniert Surfen http: // localhost / new-post # comment-29 in jedem Browser ...

urlopen Methode nicht Parse-Urls mit "#" in ihm?

Wer weiß?

War es hilfreich?

Lösung

In dem HTTP-Protokoll, das Fragment (von # ab) nicht über das Netzwerk an den Server gesendet: es vom Browser lokal gespeichert und verwendet werden, wenn die Antwort des Servers vollständig empfangen wird, irgendwie „visuell lokalisiert“ die genauen auf der Seite erkennt gezeigt als „aktuell“ wird (zum Beispiel, wenn die zurückgegebene Seite in HTML ist, wird dies durch Parsen des HTML und die Suche nach der ersten geeigneten <a> Flagge erfolgen).

So ist das Verfahren: Entfernen Sie das Fragment z.B. via urlparse.urlparse; verwenden, um den Rest der Ressource zu holen; analysieren sie auf dem Server Antwort des Content-Type-Header in geeigneter Weise basiert; dann nehmen Sie, was visuelle Wirkung Ihres Programm macht in Bezug auf den „aktuellen Spot“ auf der Ressource, basierend auf das Fragment in der geparsten Ressource Lokalisieren Sie im ersten Schritt erhalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top