Ankündigung

Einklappen
Keine Ankündigung bisher.

fsockopen funktioniert nicht mit SSL

Einklappen

Neue Werbung 2019

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

  • fsockopen funktioniert nicht mit SSL

    Moin,

    Ich möchte gerne mittels fsockopen() eine Verbindung zu einer mittels SSL verschlüsselten Seite herstellen. Ich bekomme es allerdings nicht zum laufen. Momentan habe ich in Anlehnung zu dem Beispiel auf php.net folgendes für eine Verbindung ohne SSL:

    PHP-Code:
    <?php
    $fp 
    fsockopen("www.google.de"80$errno$errstr10);
    if (!
    $fp) {
        echo 
    "Error: $errstr ($errno)<br />\n";
    } else {
        echo 
    "Start: \n";
        echo 
    fgets($fp128);
        
    $out "GET / HTTP/1.1\r\n";
        
    $out .= "Host: www.google.de\r\n";
        
    $out .= "Connection: Close\r\n\r\n";
        
    fwrite($fp$out);
        echo 
    "<pre>";
        while (!
    feof($fp)) {
            echo 
    fgets($fp128);
        }
        echo 
    "</pre>";
        
    fclose($fp);
    }
    ?>
    Das funktioniert soweit, es werden die HTTP-Header und das HTML der Google Startseite ausgegeben. Allerdings dauert der Aufruf immer genau 1 Minute, obwohl ich ja einen Timeout von 10 Sekunden angegeben habe und es eigentlich keinen Timeout geben sollte. Wenn ich jetzt oben in der 2ten Zeile "ssl://www.paypal.com" und den Port 443 eingebe und weiter unten auch google durch paypal ersetze und das script aufrufe braucht es ca. 3 Minuten und 30 Sekunden und ich erhalte keine vernünftige Ausgabe, nur "Start: <pre></pre>"

    Die PHP Version ist 5.2.12-0.dotdeb.1 auf einem Apache 2.2.9 und laut phpinfo() mit OpenSSL.

    Hat jemand ne Idee woran es liegen könnte? Muss ich irgendwie vielleicht noch eine Zertifikateliste angeben auf die geprüft werden soll? Oder funktioniert ein einfaches "GET / HTTP/1.1\r\n" nicht bei HTTPS?

    Vielen Dank,
    cider

  • #2
    Schau mal in die Doku zu fsockopen.
    Vor den Hostname ein "ssl://" oder "tls://" setzen. Nicht vergessen, den Port auch zu ändern (meistens 443).

    Grüzi!
    http://mcsodbrenner.blogspot.com/
    Serpent PHP Template Engine: http://code.google.com/p/serpent-php-template-engine/

    Kommentar


    • #3
      @McSodbrenner: Danke für die Antwort, aber guck du auch nochmal in meinen Beitrag...

      grüße,
      cider

      Kommentar


      • #4
        Hi,
        ich hab genau das selbe Problem zur Zeit. Ich muss auf einen Socket über TLS zugreifen. Wenn der Socket ohne SSL läuft geht es ohne Probleme. Sobald ich allerdings SSL aktiviere lädt er ewig und kann erst nach knapp ner Minute connecten. Daten sendet er dann aber auch nicht wirklich.

        Ich habs schon mit fsockopen, fopen, socket_create, stream_socket_client versucht. Überall das selbe Problem! Ich hab auch einige Bugs zu dem Thema gefunden. Ich weiß allerdings nicht ob es noch bestehende Bugs sind oder ob es mitlerweile eine Lösung gibt. Aber bis jetzt hab ich es nicht geschaft über SSL eine Verbindung aufzubauen.

        Solltest du ne Lösung finden kannst du dich ja nochmal melden. Wenn ich was finde meld ich mich.

        Kommentar


        • #5
          Dumme Frage, aber
          - Port richtig?
          - schonmal mit cUrl probiert?

          Ich hab keine Probleme beim connect per SSL, hier mal ein auszug aus meiner Klasse

          PHP-Code:
          function __connect$param = array() )
              {
                  
          $fp fsockopen("ssl://".$this->server443$errno$errstr30);
                  if(!
          $fp){
                      return 
          "$errno -> $errstr<br>";
                  }else{
                      
          fwrite($fp$param['content']);
                      
          $output_array = array();
                      while(!
          feof($fp)){
                          
          array_push($output_array,fgets($fp));
                      }
                      
          fclose($fp);
                      return 
          $output_array;
                  }
              } 
          mfg

          Kommentar


          • #6
            @cider: Sorry, ich hätt schwören können, dass es nicht in deinem Beitrag stand Jupp, ich würds auch mal mit cURL probieren.
            http://mcsodbrenner.blogspot.com/
            Serpent PHP Template Engine: http://code.google.com/p/serpent-php-template-engine/

            Kommentar


            • #7
              Die Version von MasterD ist ja quasi genauso wie das Beispiel von php.net. Es läuft daher auch nicht bei mir.

              cURL mit diesem Beispiel geht wunderbar:
              PHP-Code:
              <?php
              echo "<pre>";
              $ch curl_init();

              curl_setopt($chCURLOPT_URL"https://www.paypal.com/");
              curl_setopt($chCURLOPT_HEADER1);
              curl_setopt($chCURLOPT_FOLLOWLOCATION1);

              $output curl_exec($ch);
              curl_close($ch);
              echo 
              $output;
              echo 
              "</pre>";
              ?>
              Allerdings ist das leider nicht praktikabel, da ich das Script auf mehreren Servern mit Standard-Webspace laufen lassen möchte und dort kein cURL zu Verfügung steht.

              Hat noch jemand ne Idee?

              grüße,
              cider

              Kommentar


              • #8
                Mit curl kannst du leider auch nur über HTTP oder andere Anwendungsprotokolle kommunizieren. Reine Sockets kann man damit nicht bedienen :/

                Kommentar


                • #9
                  Naja du könntest ja einen MasterServer mit cURL machen und die anderen ihre Daten daraus beziehen lassen.

                  Kommentar


                  • #10
                    Moin,

                    mittlerweile läufts. Im Beispiel ganz oben ist die Zeile 7 "echo fgets($fp, 12;" über dem GET... natürlich Schwachsinn und muss raus. Ich dachte ich hätte das Beispiel von PHP: fsockopen - Manual direkt übernommen, aber anscheinend hatte ich doch etwas aus den Kommentaren übernommen.

                    Ohne die besagte Zeile gehts.

                    Danke für eure Mühe,
                    cider

                    Kommentar

                    Lädt...
                    X