| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

13-05-2009, 14:40
|
|
petro_0
Registrierter Benutzer
|
|
Registriert seit: Jan 2006
Ort: Fürth
Beiträge: 175
|
|
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
|

13-05-2009, 14:49
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
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.
|

13-05-2009, 14:53
|
|
petro_0
Registrierter Benutzer
|
|
Registriert seit: Jan 2006
Ort: Fürth
Beiträge: 175
|
|
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
|

13-05-2009, 16:33
|
|
PHP-Desaster
PHP Expert
|
|
Registriert seit: Mar 2006
Beiträge: 3.104
|
|
Nutze doch den HttpClient des Zend Frameworks. Bevor du das tausendste Mal einen Zugriff auf Http nachimplementierst.
|

13-05-2009, 17:43
|
|
frodenius
Registrierter Benutzer
|
|
Registriert seit: Sep 2006
Ort: Germany, Frankfurt/Main
Beiträge: 156
|
|
ich werf einfach mal curl in die diskussion.
__________________
blllubb
|

13-05-2009, 18:40
|
 |
fireweasel
Registrierter Benutzer
|
|
Registriert seit: Sep 2008
Ort: At home
Beiträge: 680
|
|
Zitat:
Zitat von petro_0
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.
__________________
PHP-Code:
class Brick implements Throwable {
// ...
}
|

13-05-2009, 21:53
|
|
petro_0
Registrierter Benutzer
|
|
Registriert seit: Jan 2006
Ort: Fürth
Beiträge: 175
|
|
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
|

13-05-2009, 22:35
|
 |
fireweasel
Registrierter Benutzer
|
|
Registriert seit: Sep 2008
Ort: At home
Beiträge: 680
|
|
Zitat:
Zitat von petro_0
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?
Zitat:
|
ich wollte nur einen kleine tip in die richtige richtung.
|
Zitat:
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
Zitat:
|
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.
__________________
PHP-Code:
class Brick implements Throwable {
// ...
}
Geändert von fireweasel (14-05-2009 um 11:31 Uhr)
|

14-05-2009, 08:34
|
|
petro_0
Registrierter Benutzer
|
|
Registriert seit: Jan 2006
Ort: Fürth
Beiträge: 175
|
|
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
|

14-05-2009, 08:39
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
Zitat:
....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()
|

14-05-2009, 11:45
|
 |
fireweasel
Registrierter Benutzer
|
|
Registriert seit: Sep 2008
Ort: At home
Beiträge: 680
|
|
Zitat:
Zitat von combie
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:
Zitat:
|
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?
__________________
PHP-Code:
class Brick implements Throwable {
// ...
}
|

14-05-2009, 12:43
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
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".
|

14-05-2009, 12:46
|
|
petro_0
Registrierter Benutzer
|
|
Registriert seit: Jan 2006
Ort: Fürth
Beiträge: 175
|
|
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, $errstr, 15);
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
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|