POST un cUrl

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

  • POST un cUrl

    Hallo,

    ich öffne eine Seite mit Curl so:

    PHP-Code:
                // Verbindung zur zuöffnenden Seite herstellen
                
    $cUrl curl_init();
                
    curl_setopt($cUrlCURLOPT_URL$this->theUrl);
                
    curl_setopt($cUrlCURLOPT_HEADER1);
                
    curl_setopt($cUrlCURLOPT_RETURNTRANSFER1);
                
    curl_setopt($cUrlCURLOPT_HTTP_VERSIONCURL_HTTP_VERSION_1_0);
                
    curl_setopt($cUrlCURLOPT_TIMEOUT$this->timeout);
                
    // ... Proxy vorhanden? Wenn ja über diesen öffnen
                
    if ($this->theProxy)
                    
    curl_setopt($cUrlCURLOPT_PROXY$this->theProxy);
                
    $pageContent       curl_exec($cUrl);
                
    // ... Fehler aufgetreten
                
    if (curl_error($cUrl))
                {
                    
    $this->AddError(curl_error($cUrl));
                    return;
                }
                
    // ... schließen
                
    curl_close($cUrl); 
    danach trenn ich den Header und Body aus der Variable $pageContent und geb den Body aus.

    soweit geht das alles auch. wenn die aufzurufende Seite allerdings ein abzuschickendes Formular ist per POST, müsste ich das in Curl irgendwie integrieren, damit mir dieses auch zur Verfügung steht.

    mit curl_slist_append() kann ich, glaube ich, ja den Header beeinflussen. kennt jemand ein schnippsel wo alle POST übergaben, an curl übergeben wird?

    danke!

  • #2
    wenn die aufzurufende Seite allerdings ein abzuschickendes Formular ist per POST, müsste ich das in Curl irgendwie integrieren, damit mir dieses auch zur Verfügung steht.
    und jetzt noch mal verständlich.

    Kommentar


    • #3
      ich will POST-Variablen an CURL weiterleiten...
      aber ich habe jetzt CURLOPT_POSTFIELDS gefunden, probier es jetzt erstmal damit.

      Kommentar


      • #4
        Schön das auch du die Manual lesen kannst.
        Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

        Kommentar


        • #5
          So, hab ich gelöst. POST funzt soweit bis auf File-Uploads.
          PHP-Code:
                      if ($this->responseMethod == 'POST')
                      {
                          
          $postfields = array();
                          foreach (
          $_POST as $key => $value)
                              
          $postfields[$key] = $value;
                          foreach (
          $_FILES as $key => $value)
                              
          $postfields[$key] = '@'.$value["name"];
                          
          curl_setopt ($cUrlCURLOPT_POST1);
                          
          curl_setopt ($cUrlCURLOPT_POSTFIELDS$postfields);
                      } 
          Ich bekomm die Fehlermeldung : failed creating formpost data

          im tut steht das es da ein bug gibt und ich diesen mit realpath($value["name"]) lösen könnte, was aber nicht funktioniert.

          kennt jemand die lösung für das problem?

          Kommentar


          • #6
            ich werd hier noch verrückt...ich google rum und probiere wie ein wilder, finde aber keine Lösung.

            Die $_POST-Variable bekomm ich in die aufzrufende Seite, aber die $_FILES-Variable ist leer.

            Kennt jemand eine Lösung?

            Ich habs bis jetzt so:
            PHP-Code:
                       if ($this->responseMethod == 'POST')
                        {
                            
            $postfields = array();
                            foreach (
            $_POST as $key => $value)
                                
            $postfields[$key] = urlencode($value);
                            if (!empty(
            $_FILES))
                            {
                                foreach (
            $_FILES as $key => $value)
                                    if ((
            trim($key) != "") && (trim($value) != ""))
                                        
            $postfields[$key] = "@".urlencode($value["name"]);
                            }
                            
            curl_setopt($cUrlCURLOPT_POSTFIELDS$postfields);
                        } 
            bekomme aber immer wieder den Fehler: "failed creating formpost data"...

            ich bekomm ne krise...danke!

            Kommentar


            • #7
              so läuft es jetzt, ABER nur wenn ich das TEMP-File angebe.

              PHP-Code:
                          if ($this->responseMethod == 'POST')
                          {
                              
              $postfields = array();
                              foreach (
              $_POST as $key => $value)
                                  
              $postfields[$key] = urlencode($value);
                              if (!empty(
              $_FILES))
                              {
                                  foreach (
              $_FILES as $key => $value)
                                      if ((
              trim($value['name']) != "") && (trim($value['tmp_name']) != ""))
                                      {
                                          
              $org_name $value['name'];
                                          
              $tmp_name realpath($value['tmp_name']);
                                          
              $postfields[$key] = "@$tmp_name";
                                      }
                              }
                              
              curl_setopt($cUrlCURLOPT_POSTFIELDS$postfields);
                          } 
              jetzt fehlt mir allerdings der originale dateinamen!

              Array ( [myupload] => Array ( [name] => phpLbQhZo [type] => application/octet-stream [tmp_name] => /tmp/php7fovgs [error] => 0 [size] => 4400 ) )
              kennt sich da keine aus?
              Zuletzt geändert von TriphunEM; 20.07.2007, 09:56.

              Kommentar


              • #8
                Ich verstehe nicht so ganz wo das Problem liegen soll ?
                "Nicht jeder Mensch kann und soll Programmieren[...]".

                Kommentar


                • #9
                  das problem ist das das Array $_FILES so aussehen müsste:
                  Code:
                  Array ( [myupload] => Array ( [COLOR=red][name] => derDateiname.zip[/COLOR]  [type] => application/octet-stream
                  [tmp_name] => /tmp/php7fovgs [error] => 0 [size] => 4400 ) )
                  es sieht aber so aus

                  Code:
                  Array ( [myupload] => Array ( [COLOR=red][name] => phpcJK5gM[/COLOR]  [type] => application/octet-stream 
                  [tmp_name] => /tmp/php7fovgs [error] => 0 [size] => 4400 ) )
                  also unter [name] sollte der originale dateinamen stehen, aber hier wird ein temporärer erzeugt.

                  jetzt ist die frage, wie kann ich den originalen Dateinamen in CURL mit übergeben???
                  Zuletzt geändert von TriphunEM; 20.07.2007, 16:05.

                  Kommentar


                  • #10
                    hat denn niemand eine ahnung? das muss doch machbar sein?

                    Kommentar


                    • #11
                      PHP-Code:
                      <?
                      #### Variabeln
                      $datei        =    "000001.txt";
                      $url            =    "http://localhost/Neuer%20Ordner/test3.php";

                      $postData2 = array();

                      $postData2[ 'data' ] = "@" . realpath($datei);

                      #### Initieren der cURL verbindung
                      $ch = curl_init();

                      #### Setzen der cURL Parameter
                      curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
                      curl_setopt($ch, CURLOPT_URL, $url );
                      curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
                      curl_setopt($ch, CURLOPT_POST, 1 );
                      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER ,FALSE);
                      curl_setopt($ch, URL_HTTP_VERSION_1_1,1);
                      curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
                      curl_setopt($ch, CURLOPT_POSTFIELDS, $postData2 );

                      #### Ausf&uuml;hren der HTTP Session
                      $response = curl_exec( $ch );

                      #### Wenn cURL fehler, javascript alert
                      if(curl_error($ch)){
                          echo "<script type=\"text/javascript\">
                      <!-- alert('Es ist ein Fehler aufgetreten:\n\n" . curl_error($ch) . "'); --></script>";
                          exit;
                      }
                      #### Response des Server verarbeiten
                      echo $response;

                      #### Schließen der cURL verbindung
                      curl_close($ch);
                      ?>


                      Array ( [data] => Array ( [name] => 000001.txt [type] => text/plain
                       [tmp_name] => C:\xampp\tmp\php1D4.tmp [error] => 0 [size] =>
                       3171 ) )
                      Funktioniert ohne Probleme !!!
                      "Nicht jeder Mensch kann und soll Programmieren[...]".

                      Kommentar


                      • #12
                        wo liegt deine datei? auf dem server, wenn ja ist es aber nicht die lösung. weil die datei auf der festplatte liegt und per form auf den server kommt, und dort als datei mit einem temp.namen liegt.

                        nicht ich, sondern die seite die über curl aufgerufen wird, schickt ein forumlar ab. also kann ich die datei nicht beeinflussen!

                        ???

                        Kommentar


                        • #13
                          ich lass das tempfile jetzt ins original umbenennen und lösch es nach dem post gleich wieder. das sollte helfen!

                          Kommentar


                          • #14
                            Ahh jetzt hab ich dein Problem verstanden du lädst quasi die Datei 2 mal hoch. Mach nach dem Ersten schritt ein move_uploaded_file() und dann sende per cURL an den anderen Server. Jetzt sollte dir der Richtige Name wieder zu Verfügung stehen
                            Zuletzt geändert von xkl1986; 23.07.2007, 11:19.
                            "Nicht jeder Mensch kann und soll Programmieren[...]".

                            Kommentar

                            Lädt...
                            X