Öffnen Sie die Verbindung manuell mit fsockopen()
, damit Sie den Zeitpunkt des Sendens der Anforderung und das Schließen der Verbindung steuern können.
$conn = fsockopen("stackoverflow.com", 80);
$request = "GET/HTTP/1.1\r\n" +
"Host: stackoverflow.com\r\n" +
"Connection: keep-alive\r\n\r\n";
fputs($conn, $request);
$response = fgets($conn);
sleep(30);
close($conn);
Connection: keep-alive
teilt den Server die Verbindung offen zu halten, bis der Client schließt (das in HTTP eigentlich der Standard ist/1.1, aber kein Schaden es ausdrücklich in Senden).
Die meisten Webserver haben jedoch ein Inaktivitäts-Timeout, das Verbindungen im Leerlauf schließt. Laut Wikipedia ist dies standardmäßig 15 Sekunden in Apache httpd 1.3 und 2.0 und 5 Sekunden in httpd 2.2. Es ist also wahrscheinlich, dass der obige Code nicht effektiv ist. Sie müssen alle paar Sekunden neue Anfragen senden, damit der Server die Verbindung nicht schließt.
Warum sollten Sie das tun? – Barmar
Nicht sicher, fragte mich mein Freund und ich bin wirklich neugierig, wie das gemacht werden kann. – Iskren
Verwenden Sie 'fsockopen()', um die Verbindung zu öffnen, senden Sie die HTTP-Anforderung mit 'fputs() und ruhen Sie dann 30 Sekunden lang, bevor Sie die Verbindung schließen. – Barmar