Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Проблема при обработке foto.mail.ru


Автор: vovka2008 6.3.2008, 13:45
Проблема при обработке foto.mail.ru
Я написал php-парсер для каталога фотографий foto.mail.ru.
Но с каталогом http://foto.mail.ru/catalog/erotic/1.html
возникла сложность. Всё дело в том, что когда
я открываю эту страницу, то происходит редирект на http://foto.mail.ru/catalog/static/warning.html?back=http://foto.mail.ru%2F%63%61%74%61%6C%6F%67%2F%65%72%6F%74%69%63%2F%31%2E%68%74%6D%6C
,а на других каталогах (например Авто) такого нету.
Этот редирект ведёт на "Предупреждение-если Вам меньше 18 лет, то закройте браузер".
И в редиректе две кнопки:  "Войти в раздел" и "Отказаться от просмотра".
Когда нажимаю "Войти в раздел", то попадаю на http://foto.mail.ru/catalog/erotic/1.html
и тогда можно применять парсер.
У меня к Вам вопрос: как программно нажать кнопку "Войти в раздел"
и после этого получить содержимое http://foto.mail.ru/catalog/erotic/1.html
при помощи языка PHP?

А после того как я получу содержимое http://foto.mail.ru/catalog/erotic/1.html,
то запущу на него парсер.

Заранее спасибо

Автор: Serkys 6.3.2008, 13:51
http://ru2.php.net/curl
http://phpclub.ru/detail/article/curl

Автор: flashaa 6.3.2008, 13:54
Цитата(vovka2008 @  6.3.2008,  13:45 Найти цитируемый пост)
У меня к Вам вопрос: как программно нажать кнопку "Войти в раздел"

Надо понять, что делается с браузером при нажании на кнопку "войти"
Вот форма
Код

<form action="/warning">
<input type="hidden" value="http://foto.mail.ru/catalog/erotic/1.html" name="back"/>
<input type="hidden" value="/" name="page"/>
<input type="submit" value=" Войти в раздел " name="accept"/>
<input type="submit" value="Отказаться от просмотра" name="decline"/>
</form>

Cоответственно, надо выполнить запрос к foto.mail.ru/warning c этой формой и посмотреть, что придет в ответ, в том числе заголовки.
Если доступ там организован на уровне сессий, то тебе сохранить session_id, т.е. заголовок Set-Cookie, который сервер тебе направляется, а затем просто с этим Cookie: зайти на foto.mail.ru/warning.

Автор: MoLeX 6.3.2008, 13:57
vovka2008 на первый взгляд все просто... для теста удали все куки от майла, зайди по ссылке (подтверди что тебе больше 18) и посмотри какие куки появились.
Код

mrcu
p
ero_accept
.

опытным путем устанавливаем что нам необходима тока ОДНА кука, это ero_accept со значением 1. но вот и все...

Автор: vovka2008 7.3.2008, 15:21
Код

<?php
/*Я понял, что проблема в куках.
вот исходник скрипта, НЕ работает, хотя куки указал.
на первый взгляд все просто... для теста удали все куки от майла, зайди по ссылке (подтверди что тебе больше 18) 
и посмотри какие куки появились.
mrcu
p
ero_accept
опытным путем устанавливаем что нам необходима тока ОДНА кука, это ero_accept со значением 1. но вот и все... 
Я указал куки с помощью setcookie, но всё равно НЕ работает.
*/
setcookie("ero_accept", "1", time() + 6000, "foto.mail.ru", ".foto.mail.ru", 0);
setcookie("ero_accept", "1", time() + 6000, ".foto.mail.ru", ".foto.mail.ru", 0);
setcookie("ero_accept", "1", time() + 6000, "/", ".foto.mail.ru", 0);
setcookie("ero_accept", "1", time() + 6000, "foto.mail.ru", "foto.mail.ru", 0);

$text=join('', file('http://foto.mail.ru/catalog/erotic/1.html'));
//$text=join('', file('http://foto.mail.ru/catalog/static/warning.html?back=http://foto.mail.ru/catalog/erotic/1.html&page=/&accept'));
//$text=join('', file('http://foto.mail.ru/catalog/static/warning.html?back=http://foto.mail.ru/catalog/erotic/1.html'));
echo $text;
$picture_id='<div class="picture">';
for ($i=strpos($text, $picture_id); !empty($i); $i=strpos($text, $picture_id, $i+strlen($picture_id)))
    {
    /*ищем ссылку на полную версию картинки*/
    $k=$i+strlen($picture_id);
    $k=strpos($text, "href", $k);
    $k=$k+6;
    $t1=$k;
    $t2=strpos($text, '"', $k);
    $link = substr($text, $t1, $t2-$t1);
    //echo $link."<br>";
    /*ищем ссылку на эскиз*/
    $k=$t2;
    $k=strpos($text, 'src="', $k);
    $k=$k+5;
    $t1=$k;
    $t2=strpos($text, '"', $k);
    $eskiz = substr($text, $t1, $t2-$t1);
    //echo $eskiz."<br><br>";
    echo '<a href="view_foto.php?page='.$link.'" target="_blank"><img src="'.$eskiz.'" alt="картинка" height="120" width="120" BORDER=0></a>';
    echo "<br><br>";
    }
?>



M
MoLeX
Ну а кто за тебя кнопкой КОД будет пользоваться?


Автор: MoLeX 7.3.2008, 15:28
vovka2008, неправильный подход... ты пытаешься создать куку у юзера, а тебе надо чтобы была имитации куки у скрипта... почитай http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=9050

Автор: awers 7.3.2008, 15:33
а какое отношение имеет 
Код

setcookie("ero_accept", "1", time() + 6000, "foto.mail.ru", ".foto.mail.ru", 0);
setcookie("ero_accept", "1", time() + 6000, ".foto.mail.ru", ".foto.mail.ru", 0);
setcookie("ero_accept", "1", time() + 6000, "/", ".foto.mail.ru", 0);
setcookie("ero_accept", "1", time() + 6000, "foto.mail.ru", "foto.mail.ru", 0);


к 
Код

$text=join('', file('http://foto.mail.ru/catalog/erotic/1.html'));

??? Куку поставил браузеру, а файл открыл с помощью php.

читай что такое cURL

Автор: flashaa 7.3.2008, 15:38
Цитата(awers @  7.3.2008,  15:33 Найти цитируемый пост)
читай что такое cURL 

Вот пример без курл. Отправляются заголовки+тело и выводится ответ. Тоже с заголовками.
Кстати тут жестко эксплуатируется вера некоторых в то, что получая
http-x-forwarded-for или http-x-real-ip мы узнаем реальный айпи юзера, если он под прокси  smile 
Код

$data = "login=xxx&pass=zzz";
$ip = rand(0,256) . '.' . rand(0,256) . '.' . rand(0,256) . '.' . rand(0,256);

$req =  "POST /headers.php HTTP/1.0\r\n";
$req .= "Host: host.ru\r\n";
$req .= "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.6) Gecko/20071008 Ubuntu/7.10 (gutsy) Firefox/2.0.0.6\r\n";
$req .= "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";
$req .= "Accept-Language: en-us,en;q=0.5\r\n";
$req .= "Accept-Encoding: gzip,deflate\r\n";
$req .= "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n";
$req .= "HTTP-X-REAL-IP: " . $ip."\r\n";
$req .= "HTTP-X-FORWARDED-FOR: " . $ip."\r\n";
$req .= "Content-Type: application/x-www-form-urlencoded\r\n";
$req .= "Content-Length: " . strlen($data) .  " \r\n";
$req .= "\r\n";
$req .= $data;

$fp = fsockopen("host.ru", 80, $errno, $errstr, 2);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
exit;
}

fwrite($fp, $req);

while (!feof($fp)) {
   echo fgets($fp, 128);
}

fclose($fp);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)