2017-03-28 4 views
0

Ich frage mich, wie kann ich eine HTTP-Anfrage an eine Website senden und die Verbindung für 30 Sekunden live halten und dann beenden. Ist es mit PHP oder Javascript möglich?HTTP-Anfrage senden und 30 Sekunden warten

Zum Beispiel: 1. Skript sendet eine Anforderung 2. Die Verbindung zu Stackoverflow wird für 30 Sekunden 3. Nach dem auslaufenden die Verbindung am Leben gehalten wird geschlossen.

Vielen Dank im Voraus.

+0

Warum sollten Sie das tun? – Barmar

+0

Nicht sicher, fragte mich mein Freund und ich bin wirklich neugierig, wie das gemacht werden kann. – Iskren

+0

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

Antwort

1

Ö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.

Verwandte Themen