... weil dann dein Browser einen korrekten Request sendet.
Gruss
tobi
$url = 'http://www.swissinfo.org/sde/swissinfo.html?siteSect=1111';
$data = parse_url($url);
$in[] = "GET ".$url." HTTP/1.0\r\n";
$in[] = "GET ".$data['path']."?".$data['query']." HTTP/1.1\r\nHost: ".$data['host']."\r\n";
$in[] = "GET ".$data['path']."?".$data['query']." HTTP/1.X\r\nHostname: ".$data['host']."\r\n";
foreach ($in as $i) {
$temp = '';
$fp = fsockopen($data['host'], 80);
fputs($fp, $i."Connection: close\r\n\r\n");
while(!feof($fp)) $temp .= fgets($fp, 4096);
echo (strpos($temp, '200 OK') ? '200' : '!200').'<br>';
fclose($fp);
}
$mysql_user = 'administrator'; //Benutzer für die DB
$mysql_server = '127.0.0.1'; //IP des Mysql Servers
$mysql_pswd = 'ichbintotalgeheim'; //User Passwort
$mysql_db = 'news'; //Name der DB
$mysql_table = 'news_arr'; //Tabellenname
$url = 'http'; //Feldname des URL in der DB
$rep = array('http://'); // welche Teile sollen aus der URL entfernt werden
function check_feed(){
$db = mysql_connect($mysql_server,$mysql_user,$mysql_pswd);
mysql_select_db($mysql_db,$db);
$sql = "SELECT $url FROM $mysql_table where online='0'";
$res = mysql_query($sql,$db);
while($erg = mysql_fetch_assoc($res)){
$data = str_replace($rep,'',$erg["$url"]);
$data = parse_url('http://'.$data);
//Socketverbindung zum angegebenen Host aufbauen
$fp = fsockopen($data['host'],80,$errno,$errstr);
if($fp === false){
//Verbindungsaufbau gescheitert --> URL inaktiv
$sql = "Update $mysql_table set online='0' where $url='$erg[$url]'";
mysql_query($sql);
continue;
}
//Header für Request zusammensetzen
$in = "GET ".$data['path']."?".$data['query']." HTTP/1.1\r\nHost: ".$data['host']."\r\n";
$in .= "Connection: close\r\n\r\n";
fputs($fp,$in);
$header = '';
//Serverantwort abholen bis zum Connection: close
for($i=0;$i<100;$i++){
$header .= fgets($fp,512);
if(stripos($header,'connection: close')){
break;
}
}
//Serverantwort auf Redirects prüfen und diese ggf verfolgen
if(preg_match('/HTTP\\/1\\..{1}\\s{1,}301/i',$header) != false ||
preg_match('/HTTP\\/1\\..{1}\\s{1,}302/i',$header) != false){
//Location auslesen und neue URL zerlegen
preg_match('/Location: http:\\/\\/.{1,}/i',$header,$new_url);
$new_url = preg_replace('/Location:\\s{1,}/i','',$new_url[0]);
$new_url = trim($new_url);
$data = parse_url($new_url);
//Header für neuen Request
$in = "GET ".$data['path']."?".$data['query']." HTTP/1.1\r\nHost: ".$data['host']."\r\n";
$in .= "Connection: close\r\n\r\n";
//alte Socketverbindung schliessen
fclose($fp);
//Socketverbindung auf neuen Host öffnen
$fp = fsockopen($data['host'],80,$errno,$errstr);
if($fp === false){
$sql = "Update $mysql_table set online='0' where $url='$erg[$url]'";
mysql_query($sql);
continue;
}
fputs($fp,$in);
$header = '';
for($i=0;$i<100;$i++){
$header .= fgets($fp,512);
if(stripos($header,'connection: close')){
break;
}
}
//Header auf Status 200 prüfen und URL aktiv setzen
if(preg_match('/HTTP\\/1\\..{1}\\s{1,}200/i',$header) != false){
$sql = "Update $mysql_table set online='1',$url='$new_url' where $url='$erg[$url]'";
mysql_query($sql);
}else{
//Status 200 nicht gefunden URL inaktiv setzen
$sql = "Update $mysql_table set online='0' where $url='$erg[$url]'";
mysql_query($sql);
/*
Abfrage -und Response Header zur Fehlerbehandlung dumpen
var_dump(strip_tags($header,'<br>,<br />,<a>'));
echo '<br />';
var_dump($in);
echo '<br /><br />';
*/
}
}elseif(preg_match('/HTTP\\/1\\..{1}\\s{1,}200/i',$header) != false){
//Header auf Status 200 prüfen und URL aktiv setzen
$sql = "Update $mysql_table set online='1' where $url='$erg[$url]'";
mysql_query($sql);
}else{
//Status 200 nicht gefunden URL inaktiv setzen
$sql = "Update $mysql_table set online='0' where $url='$erg[$url]'";
mysql_query($sql);
/*
Abfrage -und Response Header zur Fehlerbehandlung dumpen
var_dump(strip_tags($header,'<br>,<br />,<a>'));
echo '<br />';
var_dump($in);
echo '<br /><br />';
*/
}
fclose($fp);
}
}
Kommentar