ubuntuusers.de

curl/wget 302 Moved Temporarily

Status: Gelöst | Ubuntu-Version: Ubuntu 10.04 (Lucid Lynx)
Antworten |

henry-06

Anmeldungsdatum:
16. Juni 2009

Beiträge: Zähle...

Hallo liebe Mitmenschen und Mitmenschinen,

ich habe folgendes Problem: Ich möchte gerne eine html Seite mithilfe eines Konsolenbefehls/Konsolenprogramm runterladen.

Probiert habe ich wget und curl, bei beiden kommt (via Wireshark mitgeschnitten) nur

HTTP/1.1 302 Moved Temporarily

Mit firefox kann ich die Seite aber problemlos runterladen.

Hat jemand eine Idee, wie ich das auch über die Konsole(bzw. in einem sh-skript) hinkriege? Kann man firefox (oder andere browser) benutzen, um sich in einem Skript eine internetseite runterzuladen?

Wäre Euch für Eure Hilfe sehr dankbar,

mfg henry

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

Moin,

man curl:

       -L, --location
              (HTTP/HTTPS) If the server reports  that  the  requested
              page has moved to a different location (indicated with a
              Location: header and a 3XX response code),  this  option
              will  make  curl  redo  the request on the new place.

wget hingegen sollte das automatisch so machen, soweit ich weiß – was mich nach der konkreten Seite und deinem konkreten Aufruf fragen lässt.

Inkane

Anmeldungsdatum:
17. Oktober 2010

Beiträge: 306

Um welche Webseite handelt es sich denn? Hast du es schon mal mit anderem user agent

1
wget --user-agent Mozilla/4.0

versucht?

henry-06

(Themenstarter)

Anmeldungsdatum:
16. Juni 2009

Beiträge: 22

@inkane Ja, --user-agent wurde probiert,

@Vain auch schon probiert, wget* schickt mehrere anfragen ab, irgendwann kommt auch eine antwort (allerdings von der gleichen ip) und dann bekomme ich die Startseite. So kann ich aber (scheinbar)** keine http-POST Methode aufrufen.

Was ich nicht verstehe - firefox probiert es auch nur einmal und bekommt sofort eine antwort.

mfg henry

*mit curl -L probiere ich es gleich nochmal

**hab ich jedenfalls versucht, aber er leitet mich immer zur Startseite um

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

Hmm, solche Fragen sind immer ein bisschen mühselig, wenn ihr nicht dazuschreibt, um welche Seite es sich handelt, damit man das selbst mal ausprobieren kann. ☺

Liegt es vielleicht am Referer? Wirklich 1:1 den User-Agent vom Feuerfuchs übernommen? Cookies? Ist JavaScript im Spiel? Mal den mitgeschnittenen Request per Netcat auf den Server geworfen?

henry-06

(Themenstarter)

Anmeldungsdatum:
16. Juni 2009

Beiträge: 22

So, hab jetzt mal

1
curl -L --cookie cjar --cookie-jar cjar --data suchbegriff seite.to > test.html

eingegeben.

Doch der meckert jetzt "301 Moved Permanently"??

Mit wireshark habe ich folgendes beobachtet:

curl stellt zuerst (wie eigentlich erwünscht und wie firefox es auch machen würde) eine

1
POST / HTTP/1.1 (application/x-www-form-urlencoded)

Anfrage, dann kommt das oben genannte

1
HTTP/1.1 301 Moved Permanently (text/html)

dann wiederholt curl aber eine GET HTTP/1.1 Anfrage(??? Warum GET ???)

und bekommt - nach einer endlos langen tcp-Kommunikation - eine HTTP/1.1 200 OK Antwort zurück - und ich habe dann die Startseite auf test.html.

Achja, wenn ich wget benutze, kriege ich die gleichen wireshark ausgaben, wenngleich wget nicht "HTTP/1.1" sondern "HTTP/1.0" Anfragen versendet. Deswegen bin ich auf curl umgestiegen, weil ich vermutet habe, dass wget nur begrenzt mit HTTP/1.1 kompatibel ist.

mfg henry

P.S. Die Nennung der Seite wollte ich lieber vermeiden, damit es keine "legal/illegal" Debatte über selbige Seite gibt... P.P.S. --user-agent ändert da auch nix dran.

henry-06

(Themenstarter)

Anmeldungsdatum:
16. Juni 2009

Beiträge: 22

Vain schrieb:

Liegt es vielleicht am Referer? Wirklich 1:1 den User-Agent vom Feuerfuchs übernommen? Cookies? Ist JavaScript im Spiel? Mal den mitgeschnittenen Request per Netcat auf den Server geworfen?

mozilla/4.0 oder auch 5.0, oder auch einfach mal den kompletten string, den firefox senden würde, alles probiert...

netcat kannte ich noch nicht, hab mal probiert, mit telnet die seite zu laden, erfolglos, da kam keine antwort (ich glaub, wireshark hat wieder ein "301" oder ein "302" mitgeschnitten gehabt.)

Hab auch ein Java Programm geschrieben gehabt (mit der klasse url und urlconnect, sowie inputstream etc.), als wget und curl ersatz, aber das hab ich dann auch aufgegeben, als er partout keine Cookies speichern wollte.

mfg henry

Edit: Seite entfernt

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

henry-06 schrieb:

dann wiederholt curl aber eine GET HTTP/1.1 Anfrage(??? Warum GET ???)

In der geheiligten Manpage steht geschrieben:

              When  curl  follows  a redirect and the request is not a
              plain GET (for example POST or PUT), it will do the fol‐
              lowing  request with a GET if the HTTP response was 301,
              302, or 303. If the response  code  was  any  other  3xx
              code,  curl will re-send the following request using the
              same unmodified method.

Doch sein Wille ist schwach:

       --post301
              Tells  curl  to  respect RFC 2616/10.3.2 and not convert
              POST requests into GET requests when following a 301 re‐
              direction.  The  non-RFC  behaviour is ubiquitous in web
              browsers, so curl does  the  conversion  by  default  to
              maintain  consistency.  However,  a server may require a
              POST to remain a POST after  such  a  redirection.  This
              option  is  meaningful  only  when  using -L, --location
              (Added in 7.17.1)

P.S. Die Nennung der Seite wollte ich lieber vermeiden, damit es keine "legal/illegal" Debatte über selbige Seite gibt...

Das hab’ ich ein bisschen befürchtet und in gewissem Sinne verstehe ich dein Verhalten auch, da dieser Umstand zum Beispiel meine Hilfsbereitschaft messbar mindert. ☺ Und in der Tat glaube ich, dass du recht hattest und das Posten des Links letztendlich keine besonders gute Idee war. Ja, ich weiß, das alles hätte ich mir vor meiner Aufforderung auch denken können. Ich hatte halt die latente Hoffnung, dass es einfach nur Nachlässigkeit deinerseits war und es sich um eine „normale“ Seite handelt. 😉

henry-06

(Themenstarter)

Anmeldungsdatum:
16. Juni 2009

Beiträge: 22

Vain schrieb:

henry-06 schrieb:

dann wiederholt curl aber eine GET HTTP/1.1 Anfrage(??? Warum GET ???)

In der geheiligten Manpage steht geschrieben:

Tja, ich hab bislang nicht in die Richtung gedacht, dass ich einfach die immer wieder gleiche anfrage absende, wenn er mir so ein "301" oder "302" liefert.

Bei firefox meldet er den Fehler ja auch nicht (und antwortet sofort).

Sprich, das ganze einfach immer wieder wiederholen scheint mir der falsche Weg zu sein (und funktioniert ja auch nicht).

Vain schrieb:

henry-06 schrieb:

P.S. Die Nennung der Seite wollte ich lieber vermeiden, damit es keine "legal/illegal" Debatte über selbige Seite gibt...

Das hab’ ich ein bisschen befürchtet und in gewissem Sinne verstehe ich dein Verhalten auch, da dieser Umstand zum Beispiel meine Hilfsbereitschaft messbar mindert. ☺ Und in der Tat glaube ich, dass du recht hattest und das Posten des Links letztendlich keine besonders gute Idee war. Ja, ich weiß, das alles hätte ich mir vor meiner Aufforderung auch denken können. Ich hatte halt die latente Hoffnung, dass es einfach nur Nachlässigkeit deinerseits war und es sich um eine „normale“ Seite handelt. 😉

Hm, falls es Dich beruhigen sollte, ich habe den Link wieder entfernt 😉 Zusätzlich sei zu Deiner Beruhigung gesagt - ich gehe regelmäßig ins Kino und schaue mir keine Kinofilme im Internet an. Und zur weiteren Beruhigung sei gesagt - ich benutze besagte Seite ausschließlich, um mir englischsprachige Serien anzusehen, die in den USA für jeden frei verfügbar sind, nur hier halt nicht angeboten werden und die ich mir via ein (us-) proxy auch (und tatsächlich vollkommen legal(!) ) ansehen könnte. Nur verzichte ich auf die Proxy Variante, da dies eine eigentlich sinnfreie zusätzliche Netzlast produzieren würde und dies unter umwelt- und klimagesichtspunkten doch recht fragwürdig wäre.

Ach, und außerdem: Besagte Seite hätte - wenn mein Skript funktionieren würde - durch mich keinen finanziellen Nutzen mehr, weil ich mir deren Werbung nicht mehr ansehen würde. Somit würde ich deren illegale Aktivitäten (upload von aktuellen kinofilmen) auch indirekt nicht unterstützen.

mfg henry

EDIT: Es sei angemerkt, dass --post301 auch nur die Startseite und nicht die gewünschte seite wiedergibt.

henry06

Anmeldungsdatum:
19. November 2007

Beiträge: Zähle...

Hm, Problem hat scheint sich gelöst zu haben. Zumindest scheinbar. Hab mit wireshark mal das cookie kopiert, welches firefox beim HTTP-POST mitschickt und an den Befehl --cookie 'hierStehtDasSehrLangeCookie' angehangen.

Jetzt funktionierts. Eigentlich müsste er ja mit

1
curl --cookie-jar 'file.txt' http://eineSeite.to

eine cookie Datei anlegen, aber irgendwie tut er das nicht. Wenn er aber einmal ein gültiges cookie bekommt, dann kann man mit

1
curl --cookie 'hierStehtDasSehrLangeCookie' --data 'Suche=Suchbegriff' http://eineSeite.to/irgendwas?php.bla=Suche

die Seite problemlos abfragen.

mfg henry

EDIT: Jetzt hab ichs endgültig

Mit

1
curl -L --cookie-jar 'cookie.txt' http://eineSeite.to > index.html

Die Cookies ERST speichern, dann mit

1
curl --cookie 'cookie.txt' -d 'Suche=Suchbegriff' http://eineSeite.to/irgendwas.php?bla=Suche > index.html

die Suchabfrage starten...

Es funktioniert aber NUR mit curl, bei wget wird man konsequent abgewiesen, auch wenn man das cookie einmal in seinem Besitz wähnt. Deswegen hab ich Dödel hier auch so rumgeeiert - ich hab mit wget geguckt, obs an den cookies liegt - da hats auch mit cookie nicht funktioniert - und mit curl hab ich das mit den cookies dann gleich sein lassen... 🙄

EDIT2: Unklar bleibt, warum ich ein "301" oder "302" als Fehlermeldung erhalte, wenn ich keine cookies speichere. Mit meinem selbstgeschriebenen Javaprogramm bekomme ich auch keine "301" oder "302" als Fehlermeldung, sondern eine html Seite, in der ich aufgefordert werde, cookies zu aktivieren. Naja, alles sehr mysteriös...

Antworten |