fsockopen und https

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

  • fsockopen und https

    Hallo Zusammen,

    ich sitze jetzt seit einigen Std. an einer fsockopen Verbindung per https.
    Ich bekomme es leider nicht hin.

    Ich muss eine Schnittstelle ansprechen die aktuell noch auf http läuft, aber bald auf https umgestellt wird.
    Bisher fake ich eine POST per htpps. Die xml Soap Schnittstelle wird damit wunderbar abgefragt.

    Aber https will nicht.

    Hier mein aktuelle Versuch.

    Wer kann mir helfen?

    PHP-Code:
    $fp fsockopen("https://deapvxx4/arsys/services/ARService"8097); 
    Die eigentlichr URL ist: https://deapvxx4:8097/arsys/services...IncidentReader

    Fehlermedlung:

    Warning: fsockopen() [function.fsockopen]: unable to connect to https://deapvxx4/arsys/services/ARService:8097 (Unable to find the socket transport "https" - did you forget to enable it when you configured PHP?) in /home/g/public_html/cyper//classes/post_request.class.php on line 108

    Über denn Browser komme ich hin, muss halt das Zertifikat akzeptieren...

    Info!Nein die Seite ist nicht im Netz und ja die Seite und den Server gibt es...Fa. intern.


    Danke.
    gruss pedro

  • #2
    1. fsockopen("https://deapvxx4/arsys/services/ARService", 8097);
    Mache dich kundig, was das fsockopen überhaupt für Protokolle mag.
    z.B. udp, ja aber http oder https, nein.


    Warum nicht einfach mit file_get_contents()?
    Und ja (bevor die Frage kommt) auch damit kann man POST Requests absetzen.
    Wir werden alle sterben

    Kommentar


    • #3
      mmhhh dachte hätte was gelesen von fsockopne und https...

      file_get_contents... gut ich teste...

      melde mich wieder sobald erfolgt.

      Danke erstmal
      gruss pedro

      Kommentar


      • #4
        Nutze doch den HttpClient des Zend Frameworks. Bevor du das tausendste Mal einen Zugriff auf Http nachimplementierst.

        Kommentar


        • #5
          ich werf einfach mal curl in die diskussion.
          blllubb

          Kommentar


          • #6
            Zitat von petro_0 Beitrag anzeigen
            Hallo Zusammen,

            ich sitze jetzt seit einigen Std. an einer fsockopen Verbindung per https.
            Ich bekomme es leider nicht hin. (...)

            Hier mein aktuelle Versuch.

            Wer kann mir helfen?

            PHP-Code:
            $fp fsockopen("https://deapvxx4/arsys/services/ARService"8097); 
            Die eigentlichr URL ist: https://deapvxx4:8097/arsys/services...IncidentReader
            Wie wärs am Anfang mit ein wenig "RTFM"? ;-)

            Schau doch einfach mal ins PHP-Handbuch, wie die Funktion fsockopen() richtig benutzt wird. Was ist an
            Code:
            resource fsockopen ( string $hostname [, int $port= -1 [, int &$errno [, string &$errstr [, float $timeout= ini_get("default_socket_timeout") ]]]] )
            so missverständlich, dass du auf die Idee kommst, einfach eine URL hinzuwerfen und zu hoffen, dass fsockopen() dir das Ergebnis eines HTTP-Requests liefern würde?

            Die Funktion will einen Host-Namen und eine Port-Nummer. Zu der so definierten Ressource öffnet sie eine Verbindung. Mehr nicht. Du kannst dir natürlich deinen eigenen HTTP-Client bauen, dabei lernst du eine Menge. In dem Fall würde ich an deiner Stelle erst einmal versuchen, eine unverschlüsselte Verbindung hinzubekommen. Wenn du das geschafft hast, können wir nochmal über das SSL-Zeug reden. ;-)

            Aber ich würde in der Tendenz eher den anderen Postern zustimmen: Such dir was Fertiges. Es gibt file_get_contents(), die CURL-Extension, diverse Frameworks bieten fertige Klassen an und auch PEAR oder phpclasses.org haben sicher was Brauchbares zu bieten.
            Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

            Kommentar


            • #7
              guten abend,

              entschuldigung für das kleine missverständnis.

              natürlich habe ich noch mehr code...
              ich wollte nur einen kleine tip in die richtige richtung.
              ich weis was fsockopen macht... danke aber trotzdem

              pe http geht...wunderbar...
              aber eben https nicht;o(
              bisher habe ich das eben noch nciht per fsockopen versucht...
              scheint auch nciht so einfach zu gehen/sein.

              ich bin nun dran es per php soap zu versuchen
              da habe ich schon gute erfahrungen gemacht...

              zend geht nicht...auf unseren server läuft noch nicht die ab 5.xxx version die nötig ist... und zend zu nutzen...

              aber ich sollte mir doch nochmal die soap pear extension anschauen...

              aber um nochmal auf den curl zu kommen...

              kann ich eine POST auf eine SOAP Schnittstelle über curl machen?
              ich glaueb kaum oder?

              klar ok wer spricht schon eine SOAP Schnittstelle über einen gefaken Post...aber naja aber es geht....


              Ich bin offen für eine kleine diskusssion
              gruss pedro

              Kommentar


              • #8
                Zitat von petro_0 Beitrag anzeigen
                guten abend,

                entschuldigung für das kleine missverständnis.

                natürlich habe ich noch mehr code...
                Warum zeigst du uns dann falschen Quellcode in Zusammenhang mit einer PHP-Fehlermeldung?

                ich wollte nur einen kleine tip in die richtige richtung.

                ich weis was fsockopen macht... danke aber trotzdem

                pe http geht...wunderbar...
                aber eben https nicht;o(
                Die Benutzerkommentare zur Funktion sagen etwas anderes:

                http://php.net/manual/en/function.fsockopen.php#34887
                http://php.net/manual/en/function.fsockopen.php#57275 [1]
                http://php.net/manual/en/function.fsockopen.php#75388
                http://php.net/manual/en/function.fsockopen.php#84599

                bisher habe ich das eben noch nciht per fsockopen versucht...scheint auch nciht so einfach zu gehen/sein.
                So lange du deine Versuche geheimhältst, kann man darüber nur spekulieren.


                --
                [1] Sorry übersehen: Hier wird tatsächlich file() verwendet.
                Zuletzt geändert von fireweasel; 14.05.2009, 11:31.
                Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                Kommentar


                • #9
                  Guten Morgen,

                  ich wollte natürlich nichts vorenthalten.
                  ich dachte lediglich, dass man schon mit dem fsockopen was anfangen kann.
                  in meinem fall.

                  ....siehe da https und fsockopen geht ja doch... laut php.net kommentaren. danke,

                  ich finde diesen PHP: fsockopen - Manual recht vielversprechend , ich werds versuchen.

                  nebenbei versuch ich es auch nict php soap...

                  Danke erstmal für die Hilfe
                  gruss pedro

                  Kommentar


                  • #10
                    ....siehe da https und fsockopen geht ja doch... laut php.net kommentaren. danke,
                    ich finde diesen PHP: fsockopen - Manual recht vielversprechend ,
                    Das Beispeil verwendet nicht fsockopen, sonden file(), ist also auch auf file_get_contents() anwendbar.

                    Aber nicht auf fsockopen()
                    Wir werden alle sterben

                    Kommentar


                    • #11
                      Zitat von combie Beitrag anzeigen
                      Das Beispiel verwendet nicht fsockopen, sonden file(), ist also auch auf file_get_contents() anwendbar.
                      Da du anscheinend file_get_contents() als HTTP-Client-Ersatz in dein Herz geschlossen hast:

                      Und ja (bevor die Frage kommt) auch damit kann man POST Requests absetzen.
                      Über den context-Parameter und stream_context_create()? Oder gibts da noch eine einfachere Möglichkeit?
                      Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                      Kommentar


                      • #12
                        Ins Herz geschlossen?
                        Nööö...
                        Das Posting des TE ist nur falsch, oder zumindest verwirrend und das wollte ich klären.
                        Und ja: "Über den context-Parameter"


                        Wie ich es machen würde?
                        Ein SOAP Schnittstelle würde ich natürlich über die PHP SOAP Klasse ansprechen. Warum was anderes nehmen....?
                        Evt. auch über Zend_Soap_Client

                        Lautet die Frage POST+HTTPS, dann wohl cURL.
                        Für quick and dirty Sachen auch mal snoopy.

                        Fsockopen nur im Notfall. Das ist mir meist zu "low level".
                        Wir werden alle sterben

                        Kommentar


                        • #13
                          so nun hab ich mal meinen code benommen und stell ihn euch hier zum anschauen bereit.

                          Als Rückmeldung bekomme ich immer ein Connection Timeout:

                          Wer weis Rat:

                          PHP-Code:
                          <?php
                          #https://deap:8097/arsys/services/Service?server=deap&webService=o2_IncidentReader

                          #$proxy = "proxy.de.pri.o2.com";
                          #$port = 8080;

                          $proxy 'deap'
                          $port 443#8097 443

                          //fsockopen:
                          $fp fsockopen('ssl://'.$proxy$port$errno$errstr15);

                          if (!
                          $fp) {
                              echo 
                          "$errstr ($errno)<br />\n";
                          } else {
                              
                          //$raw array für header
                              
                          $raw = array();
                              
                          $raw[] = "POST https://{$proxy}:8097/arsys/services/ARService?server=deap&
                          webService=o2_IncidentReader HTTP/1.1\r\n"
                          ;
                              
                          $raw[] = "Content-Type: text/xml;charset=UTF-8\r\n";
                              
                          $raw[] = "SOAPAction: \"urn:o2_IncidentReader/OpGetIncident\"\r\n";
                              
                          //Standard Proxy
                              
                          $raw[] = "Host: {$proxy}\r\n";
                              
                          #$raw[] = "Host: deap:8097/arsys/services/ARService\r\n";
                              //data array für post daten
                              
                          $data = array();
                              
                          $data[] = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:urn=\"urn:o2_IncidentReader\">\r\n";
                              
                          $data[] = "<soapenv:Header>\r\n";
                              
                          $data[] = "<urn:AuthenticationInfo>\r\n";
                              
                          $data[] = "<urn:userName>xxx</urn:userName>\r\n";
                              
                          $data[] = "<urn:password>xxx</urn:password>\r\n";
                              
                          $data[] = "</urn:AuthenticationInfo>\r\n";
                              
                          $data[] = "</soapenv:Header>\r\n";
                              
                          $data[] = "<soapenv:Body>\r\n";

                              
                          /// zu sendende Daten///
                              
                          $data[] = "<urn:OpGetIncident>\r\n";
                              
                          $data[] = "<urn:Request-ID>00000071</urn:Request-ID>\r\n";
                              
                          $data[] = "</urn:OpGetIncident>\r\n";
                              
                          /// //////////////////

                              
                          $data[] = "</soapenv:Body>\r\n";
                              
                          $data[] = "</soapenv:Envelope>\n";
                              
                          // Die Länge brauchen wir für Content-Length
                              
                          $l 0;
                              foreach(
                          $data as $d
                                  
                          $l += strlen($d);
                                  
                              
                          $raw[] = "Content-Length: ".$l."\r\n";
                              
                          $raw[] = "Connection: close\r\n";
                              
                          $raw[] = "\r\n";

                              foreach(
                          $raw as $r) {
                                  
                          fputs ($fp$r);
                              }
                              foreach(
                          $data as $r) {
                                  
                          fputs ($fp$r);
                              }
                              while(!
                          feof($fp)) {
                                  
                          $preTEXT fgets($fp$l);
                                  
                          //wird benötigt um den $preTEXT noch weiter verarbeiten zu können,
                                  // nach dem fgets...
                                  
                          $request $request $preTEXT;
                              }
                              
                          fclose ($fp);

                              
                          print_r($request);
                          }

                          ?>
                          gruss pedro

                          Kommentar

                          Lädt...
                          X