Ankündigung

Einklappen
Keine Ankündigung bisher.

cURL

Einklappen

Neue Werbung 2019

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

  • cURL

    Hallo,

    ich stehe gerade irgendwie total auf dem Schlauch.
    Ich habe zwei Server. Auf Server A läuft ein Tool das sich Daten von Server B aus einer MySQL-DB holt. Jetzt wollte ich dafür cURL-Funktionen einsetzen und die $_POST-Variablen von Server A mittels cURL an Server B übergeben. Server B soll dann auf seine lokale MySQL zugreifen und das Ergebnis wieder an Server A zurückgeben.
    Mein Problem ist, dass Server B irgendwie gar nicht auf die Anfrage von Server A reagiert. Und Server A gibt mir immer nur boole(false) zurück.
    Wie kann ich denn auf Server B die Daten erstmal annehmen, verarbeiten und dann wieder an Server A zurückgeben.

    Danke schonmal für Eure Hilfe!

  • #2
    Das von Dir beschriebene Verfahren funktioniert.

    Server B braucht ein Skript, das die übergebenen GET- oder POST-Variablen nimmt (eine davon könnte ein Paßwort sein) und das Ergebnis ganz normal ausgibt (z. B. als XML oder CSV ...).

    Server A muß seine Anfrage absenden, wobei Du für GET-Variablen nicht mal unbedingt curl brauchst, und das zurückgegebene Ergebnis parsen.

    Warum es bei Dir nicht geht, verstehe ich nicht. In Deinem Quellcode kann ich keinen Fehler finden

    Das ganze geht aber auch viel einfacher, wenn Du einfach von Server A direkt auf die Datenbank von Server B zugreifst ...

    Kommentar


    • #3
      Hallo,

      hier ist der Code, den ich auf Server A habe. Wie muss denn jetzt der Code auf Server B dazu aussehen, damit Server B veranlasst wird, in die DB zu schauen und das Ergebnis wieder an Server A zurückzugeben?

      Code:
      function MyCurl($request)
          {
              $user_agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
              $ch = curl_init();
      
              $request['usr'] = 'xxxxx';
              $request['pwd'] = 'xxxxx';
              $request['method'] = $request['method'];
              $request['plz'] = $request['plz'];
              $request['ort'] = $request['ort'];
              ...
              $request['bla'] = $request['bla'];
      
              curl_setopt($ch, CURLOPT_URL, "https://xxx.de/curl.php");
              curl_setopt($ch, CURLOPT_HEADER, 0);
              curl_setopt($ch, CURLOPT_POST, 1);
              curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
              curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
              curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,  0);
              curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
              curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
      
              $result = curl_exec($ch);
              curl_close($ch);
      
              return $result;
          }
      Ich habe schon diverses mit $_POST etc. versucht. Leider erfolglos.

      Direkten Zugriff von Server A auf die DB von Server B wäre zwar das Einfachste, aber hier aus Datenschutzrechlichen Gründen nicht machbar. Es muss schon so sein, dass auf Server B eine Klasse hinterlegt ist, die DB-Anfragen annimmt, auswertet und dann zurückgibt.

      Kommentar


      • #4
        Zitat von lamp
        Wie muss denn jetzt der Code auf Server B dazu aussehen, damit Server B veranlasst wird, in die DB zu schauen und das Ergebnis wieder an Server A zurückzugeben?
        ...
        Ich habe schon diverses mit $_POST etc. versucht. Leider erfolglos.
        Das kommt drauf an, was Du willst. Wie sieht denn Dein Codeentwurf bisher aus und wo konkret kommst Du nicht weiter?




        Direkten Zugriff von Server A auf die DB ... hier aus Datenschutzrechlichen Gründen nicht machbar.
        Kannst Du das (oT) mal näher erläutern (interessiert mich einfach)?

        Kommentar


        • #5
          Hallo,

          mein Code sieht bisher so aus. Mir ist es allerdings noch nicht gelungen, überhaupt etwas an Server A zurückzugeben.

          PHP-Code:
          <?php
          $post 
          $_POST;

          $curlB = new cURLB();

          $return_zu_ServerA $cURLB->select($post);


          class 
          cURLB {
              function 
          cURLB()
              {
                  
          //
              
          }

              function 
          select($post)
              {
                  
          $sql  'SELECT * FROM '.$post['table']';
                  $sql .= ' 
          WHERE `plz` = '.$post['plz'];

                  $data = MySQL::select($sql);
                  return $data;
              }
          }
          ?>
          Wg. Datenschutz ist das eigentlich nur eine rechtliche Formsache. Es geht hier konkret um eine Kooperation, bei der der Kooperationspartner Daten aus einer lokalen Datenbank abfragen darf. Er darf allerdings keinen direkten Zugruff auf die DB bekommen, die zudem noch in einer DMZ steht. Das wäre also schon rein technisch sehr aufwendig. Also kam mir die Idee, das mittels cURL zu machen. Dabei dürfen nur ganz bestimmte Parameter übergeben werden und die lokale Klasse cURLB prüft vor Abfrage der DB die $_POST-Daten ganz genau. Das habe ich hier im Code wg. der Übersicht weggelassen.

          Kommentar


          • #6
            Mal sehen ...
            PHP-Code:
            <?php
            $post 
            $_POST;
            # Was soll das denn?


            $curlB = new cURLB();
            # Hier wird das Objekt erzeugt ... ok.


            $return_zu_ServerA $cURLB->select($post);
            # Hier wird die Variable $return_zu_ServerA mit dem 
            # Return-Wert der Methode select() gefüllt ... auch ok.


            # Hier endet das Skript, es folgt nur noch eine 
            # Klassendefinition, die einen Parse-Fehler erzeugen
            # müßte (siehst Du auch hier im Highlighting), keine
            # Ausgabe irgendwelcher Daten.


            class cURLB {
                function 
            cURLB()
                {
                    
            //
                
            }

                function 
            select($post)
                {
                    
            $sql  'SELECT * FROM '.$post['table']';
                    $sql .= ' 
            WHERE `plz` = '.$post['plz'];

                    $data = MySQL::select($sql);
                    return $data;
                }
            }
            ?>
            PS: Du solltest dringend noch eine Plausibilitätsprüfung für die übergebenen Variablen oder wenigstens ein Paßwort einbauen, evtl. auch mal ein paar Anführungszeichen im SQL-Code ...

            Kommentar

            Lädt...
            X