Wget mit URL, die # enthält

11

Ich versuche, eine URL herunterzuladen , die wie folgt ist http://www.somesite.com/restaurants.html#photo=22x00085.

Ich habe es zwischen einfache Anführungszeichen gesetzt, aber es lädt nur http://www.somesite.com/restaurants.html herunter, was nicht die richtige Seite ist.

Gibt es eine Lösung?

user1289749
quelle
Ich kann das jetzt nicht testen, aber soweit ich mich erinnere, funktioniert% 20 für Speicherplatz, also würde% 23 wahrscheinlich für # funktionieren (% 23 ist die prozentuale Codierung für #)
Lupincho
3
ist es nicht die gleiche HTML-Datei? Das # weist den Webbrowser möglicherweise an, zu einem bestimmten Teil der Seite zu springen.
Barlop

Antworten:

20

wgetfunktioniert gut. Die URI-Syntax gibt an, dass das Fragment - das #fooTeil - vollständig clientseitig interpretiert und beim Abrufen des Dokuments selbst nicht verwendet werden soll.

Wenn es sich beispielsweise um eine HTML-Seite handelt, kann der Browser zu einem benannten Abschnitt scrollen oder - in Ihrem Fall - einen JavaScript-Code auslösen, der ein bestimmtes Foto anzeigt.

Mit anderen Worten, soweit wgetes die URIs betrifft

  • http://www.somesite.com/restaurants.html#photo=22x00085 und
  • http://www.somesite.com/restaurants.html

... auf dieselbe Seite zeigen /restaurants.html . Den Rest erledigt Ihr Browser. Das Öffnen restaurants.html#photo=22x00085im Browser sollte einwandfrei funktionieren.

user1686
quelle
8

Ohne den richtigen Link zu besuchen, kann ich nicht sagen, um welchen es sich handelt, aber es gibt nur zwei Möglichkeiten:

Dennis
quelle
Ich habe viele Websites gesehen, die das URL-Fragment auf diese Weise missbrauchen. Ganz oben auf der Liste steht Google. Dies verstößt gegen eine ganze Reihe von RFCs, aber nicht so viele Leute scheinen sich darum zu kümmern, da "es funktioniert" ...
Michael Hampton
1
@ MichaelHampton: Könnten Sie genau angeben, gegen welche RFCs es verstößt?
user1686
@grawity RFC 2396, Teil 2.4.3 kann gelesen werden, um zu sagen, dass # nicht Teil eines URI ist. Dies scheint in RFC 3986 gelockert zu sein, da es vage genug ist, nichts zu definieren.
Rich Homolka
1
@RichHomolka: Es heißt nur, dass "foo # bar" tatsächlich als "URI-Referenz" bezeichnet wird, bestehend aus dem URI (zum Abrufen von Daten verwendet) und dem Fragment (Interpretation dem Benutzeragenten überlassen). Es würde nur verletzt, wenn das Fragment tatsächlich in einer HTTP-Anfrage gesendet wurde.
user1686
0

Das ist nicht die URL für das Bild. Dies ist die URL für eine Seite, die ein Skript oder einen anderen Code zum Abrufen des Bildes verwendet. Versuchen Sie, die Seite mit deaktiviertem JavaScript zu laden. Das ist es, was wget für Sie holt.

Um die URL für das Bild zu finden, besuchen Sie die Seite über Ihren Browser und klicken Sie mit der rechten Maustaste auf das Foto. Es sollte eine Option zum Anzeigen von Informationen zum Bild geben, einschließlich seiner URL.

Wenn dies nicht funktioniert, liegt dies möglicherweise daran, dass das Image über Flash oder ein anderes clientseitiges Programm geladen wird. Sie können Fiddler oder Wireshark verwenden, um zu beobachten, welche URL geladen wird.

Wenn Sie uns die tatsächliche URL der Site mit dem Bild mitteilen, können wir Ihnen dabei helfen, festzustellen, wie das Bild geladen wird.

Jeremy Stein
quelle