fopen/readfile funktioniert nicht

C4rter

Mitglied
fopen/readfile funktioniert nicht - HTTPS Request

Hallo,

ich habe auf meinem PC einen Systemdienst laufen. Diesen kann ich mit Parametern ansprechen, z.B. kann man diese Anfrage im Browser stellen:
https://localhost:8081/testparameter=5&Param2=Hallo
Wie man sieht läuft der Dienst auf Port 8081.
Die Antwort auf diese Anfrage ist:

<html><body>
Hallo Welt!<br>GET /testparameter=5&Param2=Hallo HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-ms-application, application/vnd.ms-
xpsdocument, application/xaml+xml, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint,
application/msword, */*
Accept-Language: de
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506;
InfoPath.2)
Host: localhost:8081
Connection: Keep-Alive
Cookie: PHPSESSID=870f997f47a65594900dd29e81bf312d
</body></html>

Er antwortet also einfach nur mit Hallo Welt und den Browser Werten.

Nun meine Frage:

Ich will aus PHP Befehle an den Dienst senden wie z.B.:
https://localhost:8081/createUser=true&Name=Heino
Der Dienst soll dann antworten(z.B. "User created" oder einfach nur true) und diese Antwort soll PHP bekommen und auswerten.
Wie mache ich das?
Ich habe fopen("https://localhost:8081/testparameter=5&Param2=Hallo", 'r'); ausprobiert aber dort kommt immer nur der Fehler:

Warning: readfile(https://localhost:8081/testparameter=5&Param2=Hallo) [function.readfile]: failed to open stream: Ein Verbindungsversuch ist fehlgeschlagen, da die Gegenstelle nach einer bestimmten Zeitspanne nicht richtig reagiert hat, oder die hergestellte Verbindung war fehlerhaft, da der verbundene Host nicht reagiert hat. in C:\xampp\htdocs\login.php on line 24

Fatal error: Maximum execution time of 60 seconds exceeded in C:\xampp\htdocs\login.php on line 25
Beim Dienst sind auch keine Verbindungen eingegangen.

Ich habe dann herausgefunden das fopen wohl nicht mit :8081 zurecht kommt, also das nicht mag wenn man den Port angeben muss.
Welche Möglichkeit habe ich noch, damit PHP die Antwort erhält und auswerten kann?
 
Zuletzt bearbeitet:
Okay, ich habe herausgefunden das ich cUrl brauchte und habe das aktiviert.
Hiermit bekomme ich auch eine SSL Verbindung zum Dienst hin, der Dienst meldet auch das eine SSL Verbindung besteht.

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"https://localhost:8081/testparameter=5&Param2=Hallo");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 4);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $header);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
$data = curl_exec($ch);
curl_close ($ch);
echo $data;

Allerdings ist in $data nichts drin :-(
 
Zuletzt bearbeitet:
Ok, ich weiß wohl warum. Curl wirft diesen Fehler:
SSL: certificate subject name 'www.dummy-zertifikat.de' does not match target host name 'localhost'
Ich habe aber gerade nur dieses Zertifikat, kann man diesen Fehler irgendwie umgehen?
Edit: Schon geschafft

Ok, fertig, allein geschafft:

define('POSTVARS', 'testparameter=5&Param2=Hallo'); // POST VARIABLES TO BE SENT
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"https://localhost/");
curl_setopt($ch, CURLOPT_POST ,1);
curl_setopt($ch, CURLOPT_POSTFIELDS ,POSTVARS);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION ,1);
curl_setopt($ch, CURLOPT_HEADER ,0); // DO NOT RETURN HTTP HEADERS
curl_setopt($ch, CURLOPT_PORT, 8081);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 4);
//curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $header);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
$data = curl_exec($ch);
if($data == true)
{
echo $data;
}
if($data == false)
{
echo curl_error($ch);
}
curl_close($ch);
 
Zuletzt bearbeitet:
Zurück