Sebastian Gebhard: HTTPS POST Request

Hallo,

ich weiß, dass es zu meinem Thema schon die ein oder andere Diskussion gab. Ich hab unter anderem schon hier im Forum-Archiv gelesen und auch schon viel gegoogelt. Aber ich habe nichts gefunden, was erklären könnte warum ich nicht weiterkomme.

Hier erstmal die Ausgangslage:
Ich bin dabei eine Typo3-Service-Extension zu programmieren, die Funktionalität zum Kommunizieren mit Google Spreadsheets Data API bieten soll. Damit ein PHP-Script benutzerbezogene Google-Services nutzern kann, ist es notwendig sich per HTTP(s)-Request "einzuloggen".

Dafür gibt es das ClientLogin Interface BB

[php]
[/php]

  1. Entschuldigung, ich habe versehentlich zu früh abgesendet.

    Ich wollte noch meinen PHP-Code anfügen, den ich bisher geschrieben habe:

      
    function login($mail, $pwd){  
      $fp =  fsockopen('ssl://www.google.com', 443);  
      $request ='POST /accounts/ClientLogin HTTP/1.0  
    ';  
      $request.='Content-type: application/x-www-form-urlencoded  
    ';  
      $request.='Content-Length: 300  
    ';  
      $request.='  
    ';  
      $request.='Email='.$mail.'&Passwd='.$pwd.'&service=wise&source=typo3-txspreadsheet-x1  
    ';  
      fwrite($fp, $request);  
      $resH='';  
      $resC='';  
      while($char = fread($fp, 1)){  
       echo $char;  
      }  
      
     }  
    
    

    Warning: fread() [function.fread]: SSL: fatal protocol error in /home/www/web4/html/typo3conf/ext/spreadsheet/sv1/class.tx_spreadsheet_sv1.php on line 55

    Das ist der einzige Output den ich bekomme.
    Was mache ich falsch?

    1. ssl:// ist kein bekanntes URI Schemata.

      Versuch mal https://

      1. ssl:// ist kein bekanntes URI Schemata.

        Versuch mal https://

        Damit bekomme ich folgenden Output:

        Warning: fsockopen() [function.fsockopen]: php_network_getaddresses: getaddrinfo failed: Name or service not known in /home/www/web4/html/typo3conf/ext/spreadsheet/sv1/class.tx_spreadsheet_sv1.php on line 41

        Warning: fsockopen() [function.fsockopen]: unable to connect to https://www.google.com:443 in /home/www/web4/html/typo3conf/ext/spreadsheet/sv1/class.tx_spreadsheet_sv1.php on line 41

        Warning: fwrite(): supplied argument is not a valid stream resource in /home/www/web4/html/typo3conf/ext/spreadsheet/sv1/class.tx_spreadsheet_sv1.php on line 52

        Warning: fread(): supplied argument is not a valid stream resource in /home/www/web4/html/typo3conf/ext/spreadsheet/sv1/class.tx_spreadsheet_sv1.php on line 55

        1. Wie siehts aus, wenn du direkt im fsockopen den Pfad mit an gibst?

          Sowas wie https://www.google.com:443/accounts/ClientLogin

          1. Wie siehts aus, wenn du direkt im fsockopen den Pfad mit an gibst?

            Sowas wie https://www.google.com:443/accounts/ClientLogin

            Warning: fwrite(): supplied argument is not a valid stream resource in /home/www/web4/html/typo3conf/ext/spreadsheet/sv1/class.tx_spreadsheet_sv1.php on line 52

            Warning: fread(): supplied argument is not a valid stream resource in /home/www/web4/html/typo3conf/ext/spreadsheet/sv1/class.tx_spreadsheet_sv1.php on line 55

            Diesmal erzeugt fsocketopen keine Fehlermeldung, also scheint eine Verbindung zu Stande zu kommen, aber der zurückgegebene Datenzeiger $fp, ist laut der Fehlermeldung von fwrite gar keiner.. xD

          2. Hi Patrick,

            Wie siehts aus, wenn du direkt im fsockopen den Pfad mit an gibst?

            Sowas wie https://www.google.com:443/accounts/ClientLogin

            Nein, im PHP-Manual ist bei fsockopen() eindeutig von einem Hostnamen die Rede, nicht von einer URI.

            Allerdings steht dort auch, dass ein ssl://hostname funktionieren sollte.

            Sebastian, hast du schon mal geprüft, ob PHP den Hostnamen korrekt in die dahinterstehende IP auflösen kann? Wenn nein, dann liegt eventuell ein DNS-Problem vor. Ich finde es auf der Seite der unterstützten Transporte in PHP gerade nicht, meine aber, dass für SSL-Support auch gewissen SSL-Client-Libraries von PHP benötigt werden bzw. PHP mit SSL-Support kompiliert sein muss. Hast du dahingehend mal dein PHP geprüft?

            Viele Grüße,
              ~ Dennis.

            1. Sebastian, hast du schon mal geprüft, ob PHP den Hostnamen korrekt in die dahinterstehende IP auflösen kann? Wenn nein, dann liegt eventuell ein DNS-Problem vor.

              Wie kann ich das?

              Ich finde es auf der Seite der unterstützten Transporte in PHP gerade nicht, meine aber, dass für SSL-Support auch gewissen SSL-Client-Libraries von PHP benötigt werden bzw. PHP mit SSL-Support kompiliert sein muss. Hast du dahingehend mal dein PHP geprüft?

              Wenn dem so ist kann ich mein Projekt gleich eintüten, ein Schleifchen reinmachen und aus dem Fenster werfen... Wie gesagt, es soll eine Typo3-Extension werden. Wer will eine Typo3-Extension für die man zusätzliche PHP-Libraries braucht?

              Viele Grüße,
                ~ Dennis.

              Danke für deine Antwort

              1. Hi Sebastian,

                Wie kann ich das?

                Schon mal gethostbyname() probiert? Sollte die IP für einen Host name im DNS nachschlagen.

                Wenn dem so ist kann ich mein Projekt gleich eintüten, ein Schleifchen reinmachen und aus dem Fenster werfen... Wie gesagt, es soll eine Typo3-Extension werden. Wer will eine Typo3-Extension für die man zusätzliche PHP-Libraries braucht?

                Nun ja, die Theorie ist das eine. In der Praxis sollte bei den meisten Providern SSL-Funktionalität gegeben sein.

                Viele Grüße,
                  ~ Dennis.

          3. Moin!

            Wie siehts aus, wenn du direkt im fsockopen den Pfad mit an gibst?

            Sowas wie https://www.google.com:443/accounts/ClientLogin

            Wenn du von fsockopen() keine Ahnung hast, dann verhalte dich still. An dem Originalcode von Sebastian hast du jedenfalls nur Verschlechterungen integriert, nichts verbessert.

            - Sven Rautenberg

            --
            "Love your nation - respect the others."
    2. Moin!

      Entschuldigung, ich habe versehentlich zu früh abgesendet.

      Ich wollte noch meinen PHP-Code anfügen, den ich bisher geschrieben habe:

      function login($mail, $pwd){
        $fp =  fsockopen('ssl://www.google.com', 443);
        $request ='POST /accounts/ClientLogin HTTP/1.0
      ';
        $request.='Content-type: application/x-www-form-urlencoded
      ';
        $request.='Content-Length: 300
      ';
        $request.='
      ';
        $request.='Email='.$mail.'&Passwd='.$pwd.'&service=wise&source=typo3-txspreadsheet-x1
      ';
        fwrite($fp, $request);
        $resH='';
        $resC='';
        while($char = fread($fp, 1)){
         echo $char;
        }

      }

        
      Zunächst mal: Warum gibst du die Content-Length fix mit 300 an, wo doch dynamisch die Variablen $mail und $pwd im Content drinstehen?  
        
      
      > Warning: fread() [function.fread]: SSL: fatal protocol error in /home/www/web4/html/typo3conf/ext/spreadsheet/sv1/class.tx\_spreadsheet\_sv1.php on line 55  
        
      Könnte das dieser Bug sein? <http://bugs.php.net/bug.php?id=23220>  
        
       - Sven Rautenberg
      
      -- 
      "Love your nation - respect the others."