Wie Weiterleitungen mittels cURL folgen?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Wie Weiterleitungen mittels cURL folgen?

    Hallo,

    ich möchte gerne den HTML-Code einer Webseite im Netz auslesen. Wenn die URI direkt auf diese Webseite verweist, dann ist das auch kein Problem. Sobald ich aber eine Weiterleitung dazwischen habe, knallt die Abfrage mit cURL. Ich bekomme zwar die Adresse der neuen URI, aber er folgt ihr nicht...

    Meist bekomme ich "Invalid URI in request POST [...]" oder "The requested URL [...] was not found on this server"


    PHP-Code:
    $c curl_init($link);

    // Weiterleitung folgen
    curl_setopt($cCURLOPT_FOLLOWLOCATIONTRUE);
    // POST verwenden
    curl_setopt($cCURLOPT_POST1);
    // Ergebnis als String zurückgeben
    curl_setopt($cCURLOPT_RETURNTRANSFER1);
    // Header ausgeben
    curl_setopt($cCURLOPT_HEADER1);

    $html_code curl_exec($c); 
    mache ich dieselbe Abfrage mit
    PHP-Code:
    file_get_contents($link
    funktioniert das ganze einwandfrei aber ich bekomme dafür keine Information über die neue URI, dich in diesem Fall auch gerne wissen möchte.

    Was muss ich an der cURL-Abfrage verändern, damit sie sich genauso wie file_get_contents verhält?

    Danke im Voraus!
    srp

  • #2
    Hallo,

    wenn es sich genauso verhalten soll, musst du GET statt POST verwenden. Bei einer Umleitung ist POST verboten.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Hallo,

      danke für die schnelle Antwort.

      Ich habe die Option jetzt CURLOPT_POST auskommentiert (GET is ja default) aber trotzdem bekomme ich immer noch HTML-Error-Codes 400 oder 404 zurückgeliefert.

      Beispiel:
      Simpler Beispiellink

      Die Rückgabe sind dann wie folgt aus:
      HTML-Code:
      HTTP/1.1 404 Not Found
      Date: Fri, 04 Jun 2010 10:58:55 GMT
      Server: Apache/1.3.41 (Unix) mod_cap/1.2.3 mod_oas/5.8
      Connection: close
      Transfer-Encoding: chunked
      Content-Type: text/html; charset=iso-8859-1
      
      <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
      <HTML><HEAD>
      <TITLE>404 Not Found</TITLE>
      </HEAD><BODY>
      <H1>Not Found</H1>
      The requested URL /http://www.manager-magazin.de/thema/
      uhren_spezial/ was not found on this server.<P>
      <HR>
      <ADDRESS>Apache/1.3.41 Server at adserv.quality-channel.de
       Port 80</ADDRESS>
      </BODY></HTML>
      Ich kapiere nicht wo der Fehler liegt... oder muss ich curl_exec für jeder Weiterleitung mit der neuen URI erneut aufrufen? Mit "file_get_contents" klappt es problemlos... bloß ohne die echte URI...

      Danke und Gruß
      srp
      Zuletzt geändert von spoetsch; 04.06.2010, 13:05.

      Kommentar


      • #4
        Siehst du den Slash vor der URL? Das wird es sein.
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          Zitat von AmicaNoctis Beitrag anzeigen
          Siehst du den Slash vor der URL? Das wird es sein.
          Ja - wenn man sich den genannten Link mal mit dem WebSniffer anschaut, sieht man da folgenden Location-Header in der Antwort:
          Code:
          Location:	http://http://www.manager-magazin.de/thema/uhren_spezial/
          Du hast dir leider zum Testen eine Adresse ausgesucht, deren Betreiber zu !%$# für sein Handwerk ist.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            @wahsaga

            keine Ahnung was WebSniffer da macht, aber wenn ich das selbst mit einem GET-Request per fsockopen auslese, dann krieg ich

            Code:
            HTTP/1.1 302 Found
            Date: Fri, 04 Jun 2010 12:39:53 GMT
            Server: Apache/1.3.41 (Unix) mod_cap/1.2.3 mod_oas/5.8
            Set-Cookie: RMID=538a43704c08f410; path=/; domain=.quality-channel.de
            [B]Location: http://www.manager-magazin.de/thema/uhren_spezial/[/B]
            Connection: close
            Transfer-Encoding: chunked
            Content-Type: text/html; charset=iso-8859-1
            Ich kann da kein Problem bzgl. eines falsch gesetzten Location-Header sehen *kopfkratz*

            EDIT:
            Curl arbeitet bei mir mit der Beispieladresse auch einwandfrei.
            Zuletzt geändert von Quetschi; 04.06.2010, 14:46.
            Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
            Schön - etwas Geschichte kann ja nicht schaden.
            Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

            Kommentar


            • #7
              Zitat von Quetschi Beitrag anzeigen
              keine Ahnung was WebSniffer da macht
              Stimmt, da macht der WebSniffer wohl Mist.

              Der hat auch einige andere Macken in letzter Zeit - Schade, damit taugt der als on-the-fly-Debugwerkzeug wohl nicht mehr besonders viel.
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                Zitat von Quetschi Beitrag anzeigen
                EDIT:
                Curl arbeitet bei mir mit der Beispieladresse auch einwandfrei.
                Hm... das heißt, wenn du den Link

                "http://adserv.quality-channel.de/RealMedia/ads/click_lx.ads/www.manager-
                magazin.de/homepage/center/1523005648/Right1/qc/MO20XX5474XXHOME
                /MO20XX5474XXHOME_02.html/36643562366331333463303863656430?http:
                //www.manager-magazin.de/thema/uhren_spezial/"

                mit eingangs von mir erwähnten Code nutzt, dann löst er die URI richtig auf und liefert dir auch den Quellcode der Zielseite zurück??

                Was mache ich dann falsch?

                Danke und Gruß
                srp

                Kommentar


                • #9
                  Zitat von spoetsch Beitrag anzeigen
                  Hm... das heißt, wenn du den Link

                  "http://adserv.quality-channel.de/RealMedia/ads/click_lx.ads/www.manager-
                  magazin.de/homepage/center/1523005648/Right1/qc/MO20XX5474XXHOME
                  /MO20XX5474XXHOME_02.html/36643562366331333463303863656430?http:
                  //www.manager-magazin.de/thema/uhren_spezial/"

                  mit eingangs von mir erwähnten Code nutzt, dann löst er die URI richtig auf und liefert dir auch den Quellcode der Zielseite zurück??
                  ja
                  Zitat von spoetsch Beitrag anzeigen
                  Was mache ich dann falsch?
                  k.A.

                  Was hast du denn für eine PHP-Version am laufen?
                  Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                  Schön - etwas Geschichte kann ja nicht schaden.
                  Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                  Kommentar


                  • #10
                    Hi,

                    ich habe PHP Version 5.3.1 drauf...

                    Außerdem ist der "safe_mode" = "Off" und "open_basedir" = "No value"... hab einige Einträge bei Google gesehen, dass das wohl auch zu Fehlern führen kann bei CURLOPT_FOLLOWLOCATION...

                    Hab echt keine Ahnung, wieso das bei mir nicht läuft... sind doch nur 5 Zeilen-Code...

                    srp

                    Kommentar


                    • #11
                      Hmm - laut Header-Expose ist bei WebSniffer auch 5.3.1 am werkeln - evtl. was faul in der Version?
                      Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                      Schön - etwas Geschichte kann ja nicht schaden.
                      Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                      Kommentar

                      Lädt...
                      X