PHP - Socket Problem
Socket öffen, mit Get abfragen, mit Post senden und wieder abfragen
Hi @ all!
Ich hab mal schon wieder ein doofes PHP Problem...
Und zwar möchte ich einen Socket zu einem Webserver öffnen, dann Daten mittels GET empfangen, und per POST wieder senden und dannach den Request wieder empfangen...
kunrz und knapp: Hier ist der BSP. Code:
Also das Script wird ordnungsgemäßs aufgerufen und läuft auch durch!
Aber...:
Hat jemand vll. nen Tipp !?
Danke schon mal im Voraus
__
Grüße Kallinger
PS: nen neuen Socket kann ich nicht aufmachen, da sonst die SessionID vom Webserver sich wechseln würde. Die ist aber hier nötig!
Hi @ all!
Ich hab mal schon wieder ein doofes PHP Problem...
Und zwar möchte ich einen Socket zu einem Webserver öffnen, dann Daten mittels GET empfangen, und per POST wieder senden und dannach den Request wieder empfangen...
kunrz und knapp: Hier ist der BSP. Code:
/* zuvor wird noch einiges gemacht, ist aber hierfür nicht wichtig ... */
/* Funktion um Daten an den Webserver zu schicken */
function PostToHost($host, $path, $referer, $data_to_send) {
$fp = fsockopen($host, 80, $errno, $errstr, 30);
$out = "GET $path HTTP/1.1\r\n";
$out .= "Host: $host\r\n";
$out .= "Keep-Alive: 115\r\n";
$out .= "Connection: keep-alive\r\n\r\n";
fwrite($fp, $out);
$res = "";
while (!feof($fp)) {
$res .= fgets($fp, 128);
}
//echo "RES: ".$res;
/* Bis hier her gehts noch ... */
/* Folgende Kontrolle gibt auch keinen Fehler aus... */
// Überprüfung des Sockets
$status = socket_get_status($fp);
if ($status['timed_out']) {
echo "socket timed out<br />";
}
// Daten an webserver senden
if (isset($res)) { unset($res);}
/* Daten werden gesendet, es kommt aber kein request zurück! */
fputs($fp, "POST $referer HTTP/1.1\r\n");
fputs($fp, "Host: $host\r\n");
fputs($fp, "Referer: $referer\r\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-length: ". strlen($data_to_send) ."\r\n");
fputs($fp, "Keep-Alive: 115\r\n");
fputs($fp, "Connection: keep-alive\r\n");
fputs($fp, $data_to_send);
fputs($fp, "\r\n\r\n");
$res = "";
while (!feof($fp)) {
$res .= fgets($fp, 128);
}
// echo $res;
/* Folgende Kontrolle gibt auch keinen Fehler aus... */
// Überprüfung des Sockets
$status = socket_get_status($fp);
if ($status['timed_out']) {
echo "socket timed out<br />";
}
/* Wäre nicht nötig, es bringt aber auch nix.. !? es wird das gleiche ausgegeb wie beim 1. GET*/
// 2. Get
$out = "GET $path HTTP/1.1\r\n";
$out .= "Host: $host\r\n";
$out .= "Connection: close\r\n\r\n";
fwrite($fp, $out);
$res = "";
while (!feof($fp)) {
$res .= fgets($fp, 128);
}
fclose($fp);
echo "<br />RES: ".$res;
return $res;
}
Also das Script wird ordnungsgemäßs aufgerufen und läuft auch durch!
Aber...:
- Es wird nicht $res zurückgegeben
- Der Socket scheint ab dem GET geschlossen zu sein.. zumindest geht ab dann nix mehr
- Habe per Whireshark das ganze schon überprüft, es werden die Daten per GET empfangen
- Danach bekomme ich den Request, dann sende ich die Daten per POST
- Dann sende ich die GET anfrage bekomme aber nix zurück! (eigentlich müsste ich das GET auch nicht mehr senden) sondern müsste gleich in dem $res nach dem POST stehen tuts aber nicht
- Whireshark läss auch auf keinen Fehler schließen...
Hat jemand vll. nen Tipp !?
Danke schon mal im Voraus
__
Grüße Kallinger
PS: nen neuen Socket kann ich nicht aufmachen, da sonst die SessionID vom Webserver sich wechseln würde. Die ist aber hier nötig!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 141375
Url: https://administrator.de/forum/php-socket-problem-141375.html
Ausgedruckt am: 22.12.2024 um 16:12 Uhr
8 Kommentare
Neuester Kommentar
Und zwar möchte ich einen Socket zu einem Webserver öffnen
Wofür cURL schonmal wesentlich besser ist, als selbst basteln - und es kann auch alles, was du brauchst.
Und mit feof() wirst du auch nicht weit kommen bei HTTP.
Es gibt für HTTP zwei Arten Daten zu senden: Als kompletter Block (dann ist der Content-Length-Header angegeben) oder mit Transfer-Encoding: chunked, dann erhältst du einzelne Blöcke mit Längenangabe (und ein "0" am Schluss).
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
$res1 = curl_exec($ch);
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,array('key' => 'value','key2' => 'value2'));
$res2 = curl_exec($ch);
curl_close($ch);
?>