|
| Дата |
|
USD/RUB | 93.4409 | BTC/USD | 63236.4810 |
|
|
|
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии. |
24.01.2013, 14:36
|
#1
|
Senior Member
Регистрация: 22.06.2008
Сообщений: 603
Бабло: $122240
|
Нужен 404 чекер!
Я даю список урлов на входе вида domen.com/file.php, а на выходе получаю список урлов с валидом(то есть наличие самого файлика, а не всего реса), сам файл пустой, то есть проверять на наличие определенного текста не получится, значит надо чекать ответ сервера или как там это называется, может есть у кого рабочее решение?
А то заебался искать, все что находил не пашет или виснет, может дело в виндоус 7, хз
|
|
|
24.01.2013, 14:46
|
#2
|
Senior Member
Регистрация: 11.10.2008
Сообщений: 6,409
Бабло: $904273
|
Hrefer по идее подойдёт
|
|
|
24.01.2013, 14:55
|
#3
|
Senior Member
Регистрация: 22.06.2008
Сообщений: 603
Бабло: $122240
ТС -->
|
ТС
Цитата:
Сообщение от majordon
Hrefer по идее подойдёт
|
у меня его нет к сожалению или к счастью
|
|
|
24.01.2013, 14:59
|
#4
|
Senior Member
Регистрация: 25.06.2011
Сообщений: 1,804
Бабло: $371785
|
вот
Код:
<?
set_time_limit(0);
function get_status($url, $referer = "") {
$parsed_url = parse_url($url);
$headers = "GET $url HTTP/1.1\r\n";
$headers .= "HOST: {$parsed_url['host']}\r\n";
$headers .= "User-Agent: Opera/9.01 (Windows NT 5.1; U; ru)\r\n";
$headers .= "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n";
$headers .= "Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3\r\n";
$headers .= "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\r\n";
$headers .= "Accept-Encoding: gzip\r\n";
if (!empty($referer))
$headers .= "Referer: $referer\r\n";
$headers .= "Connection: close\r\n";
$response_headers = array();
if (!($socket = @fsockopen($parsed_url['host'], (array_key_exists("port", $parsing_url) ? $parsing_url['port'] : 80), $errno, $errstr))) {
return false;
} else {
fputs($socket, $headers . "\r\n");
$status = fgets($socket);
}
preg_match("/ (\d\d\d) /", $status, $matches);
return $matches[1];
}
if (file_exists("urls.txt")) {
$urls = file("urls.txt");
echo "<table border=1 cellspacing=0 cellpadding=0><tr><th>Адрес страницы</th><th>Код ответа</th></tr>";
foreach ($urls as $url) {
echo "<tr><td>$url</td><td align=right>" . get_status(trim($url)) . "</td></tr>";
flush();
}
echo "</table>";
}
?>
список урлов кладется в urls.txt
|
|
|
24.01.2013, 15:13
|
#5
|
Senior Member
Регистрация: 22.06.2008
Сообщений: 603
Бабло: $122240
ТС -->
|
ТС
Цитата:
Сообщение от den2099
вот
Код:
<?
set_time_limit(0);
function get_status($url, $referer = "") {
$parsed_url = parse_url($url);
$headers = "GET $url HTTP/1.1\r\n";
$headers .= "HOST: {$parsed_url['host']}\r\n";
$headers .= "User-Agent: Opera/9.01 (Windows NT 5.1; U; ru)\r\n";
$headers .= "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n";
$headers .= "Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3\r\n";
$headers .= "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\r\n";
$headers .= "Accept-Encoding: gzip\r\n";
if (!empty($referer))
$headers .= "Referer: $referer\r\n";
$headers .= "Connection: close\r\n";
$response_headers = array();
if (!($socket = @fsockopen($parsed_url['host'], (array_key_exists("port", $parsing_url) ? $parsing_url['port'] : 80), $errno, $errstr))) {
return false;
} else {
fputs($socket, $headers . "\r\n");
$status = fgets($socket);
}
preg_match("/ (\d\d\d) /", $status, $matches);
return $matches[1];
}
if (file_exists("urls.txt")) {
$urls = file("urls.txt");
echo "<table border=1 cellspacing=0 cellpadding=0><tr><th>Адрес страницы</th><th>Код ответа</th></tr>";
foreach ($urls as $url) {
echo "<tr><td>$url</td><td align=right>" . get_status(trim($url)) . "</td></tr>";
flush();
}
echo "</table>";
}
?>
список урлов кладется в urls.txt
|
спасибо, но что то не робит, колонака ответ сервера пустая, и долго очень ждать приходится!
|
|
|
24.01.2013, 15:22
|
#6
|
Senior Member
Регистрация: 06.05.2007
Сообщений: 477
Бабло: $70325
|
Сколько в файлике ресурсов?
Как вариант:
1) В пятом хрумере есть анализатор ссылок, который может чекать только заголовки ответа.
2) Бесплатная версия Allsubmitter'a также умеет это делать.
3) Могу прочекать большие базы на подобные моменты, т.к. сервак виндовый часто простаивает.
__________________
Cloacking под любой источник трафика. Сдаю в аренду.
|
|
|
24.01.2013, 18:20
|
#7
|
Senior Member
Регистрация: 19.04.2007
Сообщений: 2,393
Бабло: $314345
|
Если урлов не сильно много, то пойдет вот такой скриптик:
PHP код:
<?php
set_time_limit(0);
function get_header($url) { global $urls, $i, $vsego; $counter_limit = 2; $counter = 0; $result = FALSE; while ($result === FALSE) { $counter++; if ($counter > $counter_limit) { echo '<b>'.($i + 1).'/'.$vsego.' '.$url.' connection error</b><br>'."\n";flush(); return FALSE; } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_NOBODY, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 20); $result = curl_exec($ch); if ($result === FALSE) { sleep(2); } } $header = split("\n", $result); return $header; }
$good = array(); $bad = array(); $noconnect = array();
$urls = array_map('trim', file('urls.txt'));
$vsego = count($urls);
foreach ($urls as $i => $url) { if (strpos(trim($url), 'http') === 0) { $url = parse_url(trim($url)); } else { $url = parse_url('http://'.trim($url)); } $header = get_header('http://'.trim($url['host']).trim(@$url['path'])); $location = $font1 = $font2 = '';
if ($header !== FALSE) { foreach ($header as $temp) { if (strpos($temp, '404 ') !== FALSE || strpos($temp, 'Location:') !== FALSE) { $location = trim($temp); $font1 = '<font color="red">'; $font2 = '</font>'; $f = fopen('bad.txt', 'a'); flock($f, LOCK_EX); fwrite($f, trim($url['host']).trim(@$url['path'])."\n"); fclose($f);
break; } } if ($font1 == '') { $f = fopen('good.txt', 'a'); flock($f, LOCK_EX); fwrite($f, trim($url['host'])."\n"); fclose($f); echo ($i + 1).'/'.$vsego.' '.$font1.trim($url['host']).trim(@$url['path']).' - '.trim($header[0]).'<br>'."\n";flush(); } else { echo ($i + 1).'/'.$vsego.' '.$font1.trim($url['host']).trim(@$url['path']).' - '.trim($header[0]).' - '.$location.$font2.'<br>'."\n";flush(); } } else { $f = fopen('noconnect.txt', 'a'); flock($f, LOCK_EX); fwrite($f, trim($url['host']).trim(@$url['path'])."\n"); fclose($f); } unset($urls[$i]); $f = fopen('urls.txt', 'w'); flock($f, LOCK_EX); fwrite($f, implode("\n", $urls)); fclose($f); } ?>
Урлы построчно в файл urls.txt, на выходе получится максимум 3 файла: good.txt (заголовок не содержал 404 или location), bad.txt (содержал), noconnect.txt (урлы, к которым не получилось сконнектиться).
Пример, если в urls.txt задать:
Код:
dimax.biz
dimax.biz/111.php
http://dfdsfsfsdfsdfsdfsdfsdfsdfsdf.com/
в браузере будет:
Код:
1/3 dimax.biz - HTTP/1.1 200 OK
2/3 dimax.biz/111.php - HTTP/1.1 404 Not Found - HTTP/1.1 404 Not Found
3/3 http://dfdsfsfsdfsdfsdfsdfsdfsdfsdf.com/ connection error
На папку, в которой будет данный скрипт, надо будет поставить права на запись (0777), чтобы скрипт смог создать файлы с результатами работы.
|
|
|
24.01.2013, 18:45
|
#8
|
Senior Member
Регистрация: 17.02.2011
Сообщений: 153
Бабло: $26940
|
Для чекпарамс, если что. Поддержка многопоточности, прокси и прочее в комплекте:
Код:
<http_status module_name="HTTP Status" enabled="1" check_interval="0" retries="10" use_proxies="0" results_mode="2" download_size="9999" parse_url="1">
<request>
<server address="%HOST%" port="%PORT%"/>
<headers><![CDATA[GET %OBJECT% HTTP/1.1
Host: %HOST%
User-Agent: #$m$UA$m$#
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip, deflate
Connection: close
]]></headers>
<checks>
<check result="good" type="*"/>
</checks>
</request>
<results>
<regexps>
<regexp name="%httpcode%" icase="1" format="$1" default=""><![CDATA[\n\r?^HTTP/1.\d\s+(\d\d\d)]]></regexp>
</regexps>
<fields delimiter_replace="\;">
<field title="HTTP Status code" format="plain">%httpcode%</field>
</fields>
</results>
</http_status>
|
|
|
24.01.2013, 22:33
|
#9
|
Member
Регистрация: 04.01.2013
Сообщений: 54
Бабло: $15265
|
|
|
|
Опции темы |
|
Опции просмотра |
Линейный вид
|
|