PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Antwort Header


Jürg
23.09.2005, 21:08:09
Guten Tag
Ich möchte den Antwortheader einer Fremden Seite Ermitteln.
So in der Art:
....
200 OK
...-

In einer Tabelle sind diverse URL und es wird dazu der entsprechende Wert angezeigt.
Aber wie mache ich das ? Muss doch einfach sein?

c4
23.09.2005, 22:18:35
URL mittels fsockopen() aufrufen und dann mit fread()(?) die Antwort auslesen. Dort steht z.B. die 200 (und anderes)

meikel (†)
23.09.2005, 22:20:57
Aber wie mache ich das ?
KA, wie Du das machst. Normalerweise erledigt man diesen HEAD Request mit cURL.

Jürg
23.09.2005, 22:49:18
Wunderbar
Mit fsockopen() bin ich schon länger am pröbeln. Negativ.
Aber cURL, das hat laut phpinfo mein Provider! Noch nicht negativ!

Jürg
24.09.2005, 00:01:34
Also da habe ich etwas brauchbares:
$url_f = 'http://'.$url;

// erzeuge einen neuen cURL-Handle
$handle = curl_init();

// setze die URL und andere Optionen
curl_setopt( $handle, CURLOPT_URL, $url_f ); // Die URL
curl_setopt( $handle, CURLOPT_TIMEOUT, 5 ); // Zeit in Sek. für Ausgabe
curl_setopt( $handle, CURLOPT_HEADER, 1 ); // Header ausgeben
curl_setopt( $handle, CURLOPT_NOBODY, 1 ); // Body nicht ausgegeben

// führe die Aktion aus und gebe die Daten an den Browser weiter
$header = curl_exec( $handle );

// schließe den cURL-Handle und gebe die Systemresourcen frei
curl_close( $handle );
$header ist 1, wenn etwas zurückgeliefert wird, sonst NULL.
curl_exec liefert das Ergebnis bleich an den Browser. Das sollte aber in eine Variable.
Angezeigt wird in etwa:HTTP/1.1 200 OK Date: Fri, 23 Sep 2005 21:55:27 GMT Server: Apache X-Powered-By: PHP/4.3.10-16 Content-Type: text/html; charset=iso-8859-1
Das wäre ganz gut. Brauchen würde ich jedoch nur die Fehlermeldung 200.
Wir bringe ich das nun in eine Variable?

meikel (†)
24.09.2005, 07:46:42
Etwas cURL und etwas preg_match:
<?php

define('user_agent', 'Lynx'); # eigentlich egal, aber jede Statistik will belogen werden.
define('timeout', 6);
define ('HTTP', 'HTTP/1.1'); # kannste auch in den String packen.

function get_status($url)
{
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_USERAGENT, user_agent);
curl_setopt ($ch, CURLOPT_HEADER, 1); # header
curl_setopt ($ch, CURLOPT_NOBODY, 1); # und nix weiter
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1); # für den Fall, daß der Server wilde Weiterleitungen veranstaltet
curl_setopt ($ch, CURLOPT_TIMEOUT, timeout);

if (defined('referer'))
curl_setopt ($ch, CURLOPT_REFERER, referer); # manchmal muß man auch den Referer fälschen
$arg = curl_exec ($ch);
curl_close($ch);

$pattern = '°^'.preg_quote(HTTP).'\s+([0-9]{3,})°smiU';
preg_match($pattern, $arg, $status); # Status suchen
return $status[1];
}

$url = 'http://www.php.net/index.php';
echo 'Status: ' . get_status($url) . '<br />';

?>

Jürg
24.09.2005, 11:42:14
Vielen Dank! Es geht!
Nun, das mit cURL ist neu für mich. Das werde ich mir noch genauer anschauen.

meikel (†)
24.09.2005, 19:16:49
Vielen Dank! Es geht!
Fein.
Nun, das mit cURL ist neu für mich. Das werde ich mir noch genauer anschauen.
Jute Idee. Ich erpare mir mit cURL jede Menge an Tipperei. Damit ist fsockopen() nicht aus der Welt, weil curl nicht jeden Port bedient.