Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.09.2011, 15:00   #1
DEMOgoT
Новичок
Джуниор
 
Аватар для DEMOgoT
 
Регистрация: 02.03.2009
Сообщений: 2
Вопрос Парсинг ч/з cURL, работа с печеньками...

Всем привет! Появилась у меня такая задача написать парсер браузерной игры. Делать он должен следующее: проверять фрейм на наличие определенного текста, мол "Работа закончена".

После изучения методов парсинга, решил действовать через cURL на PHP. Наломав кучу дров и перезаписав кучу файлов, пришел к боле-менее рабочему результату.

Но вот незадача. Захожу в игру, сайт заносит в куки запись, включаю парсер, он дает положительный ответ, но при этом меняет куки-запись. Т.о. когда переходишь на вкладку с игрой, и совершаешь любое действие (переход по любой ссылке) выкидывает на главную страницу с надписью "Неправильные настройки cookie, зайдите еще раз..."

Собственно зачем я к вам и обращаюсь (: необходимо каким-то образом научить парсер узнавать/находить/определять уже существующую куку и использовать ее при парсинге (если я все правильно понял конечно =/) или в принудительном порядке заставить заменить существующую куки-запись, но что бы при этом из игры не выкидывало))

PHP код:
<?php

function get_web_page$url )
{
  
$uagent "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)";

  
$ch curl_init$url );
  
curl_setopt($chCURLOPT_URL$url);
  
curl_setopt($chCURLOPT_RETURNTRANSFER1);   // возвращает веб-страницу
  
curl_setopt($chCURLOPT_HEADER0);           // не возвращает заголовки
  
curl_setopt($chCURLOPT_FOLLOWLOCATION1);   // переходит по редиректам
  
curl_setopt($chCURLOPT_ENCODING"");        // обрабатывает все кодировки
  
curl_setopt($chCURLOPT_USERAGENT$uagent);  // useragent
  
curl_setopt($chCURLOPT_CONNECTTIMEOUT120); // таймаут соединения
  
curl_setopt($chCURLOPT_TIMEOUT120);        // таймаут ответа
  
curl_setopt($chCURLOPT_MAXREDIRS10);       // останавливаться после 10-ого редиректа
  
curl_setopt($chCURLOPT_COOKIEJAR"z://coo.txt");
  
curl_setopt($chCURLOPT_COOKIEFILE,"z://coo.txt");

  
$content curl_exec$ch );
  
$err     curl_errno$ch );
  
$errmsg  curl_error$ch );
  
$header  curl_getinfo$ch );
  
curl_close$ch );

  
$header['errno']   = $err;
  
$header['errmsg']  = $errmsg;
  
$header['content'] = $content;
  return 
$header;
}

function 
post_content ($url,$postdata) {
  
$uagent "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)";

  
$ch curl_init$url );
  
curl_setopt($chCURLOPT_URL$url);
  
curl_setopt($chCURLOPT_RETURNTRANSFER1);
  
curl_setopt($chCURLOPT_HEADER0);
  
curl_setopt($chCURLOPT_FOLLOWLOCATION1);
  
curl_setopt($chCURLOPT_ENCODING"");
  
curl_setopt($chCURLOPT_USERAGENT$uagent);  
  
curl_setopt($chCURLOPT_TIMEOUT120);
  
curl_setopt($chCURLOPT_POST1);
  
curl_setopt($chCURLOPT_POSTFIELDS$postdata);
  
curl_setopt($chCURLOPT_COOKIEJAR"z://coo.txt");
  
curl_setopt($chCURLOPT_COOKIEFILE,"z://coo.txt");

  
$content curl_exec$ch );
  
$err     curl_errno$ch );
  
$errmsg  curl_error$ch );
  
$header  curl_getinfo$ch );
  
curl_close$ch );

  
$header['errno']   = $err;
  
$header['errmsg']  = $errmsg;
  
$header['content'] = $content;
  return 
$header;
}
 
//страница принимающая запрос на авторизацию
  
$url 'http://somesite.ru/login.php';

  
$postdata = array( 
       
'login'          => 'login'
       
'password'    => 'password');

  
$result post_content$url$postdata );

  
// загружаем страницу где совершается работа

  
$url 'http://somesite.ru/cgi/working.php';
  
$result get_web_page$url );
  
$html $result['content'];
      
 
$pos StrPos($html,"Работа закончена");

  if ( 
$pos === false ) { 
    echo 
'Авторизация провалилась';
    }  
 else {
      echo 
'Авторизация прошла успешно. Вы закончили работать';
    }
?>

Последний раз редактировалось DEMOgoT; 24.09.2011 в 17:44.
DEMOgoT вне форума Ответить с цитированием
Старый 24.09.2011, 21:34   #2
DEMOgoT
Новичок
Джуниор
 
Аватар для DEMOgoT
 
Регистрация: 02.03.2009
Сообщений: 2
Счастье

Так... тут подкрутил, там подкрутил и на выходе получил вот это:

PHP код:
<div style="background: black;"><?php

function get_web_page$url )
{
  
$uagent "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)";

  
$ch curl_init$url );
  
curl_setopt($chCURLOPT_URL$url);
  
curl_setopt($chCURLOPT_RETURNTRANSFER1);   // возвращает веб-страницу
  
curl_setopt($chCURLOPT_HEADER0);           // не возвращает заголовки
  
curl_setopt($chCURLOPT_FOLLOWLOCATION1);   // переходит по редиректам
  
curl_setopt($chCURLOPT_ENCODING"");        // обрабатывает все кодировки
  
curl_setopt($chCURLOPT_USERAGENT$uagent);  // useragent
  
curl_setopt($chCURLOPT_CONNECTTIMEOUT120); // таймаут соединения
  
curl_setopt($chCURLOPT_TIMEOUT120);        // таймаут ответа
  
curl_setopt($chCURLOPT_MAXREDIRS10);       // останавливаться после 10-ого редиректа
  
curl_setopt($chCURLOPT_COOKIE"Cookie1=value_1; Cookie2=value_2");

  
$content curl_exec$ch );
  
$err     curl_errno$ch );
  
$errmsg  curl_error$ch );
  
$header  curl_getinfo$ch );
  
curl_close$ch );

  
$header['errno']   = $err;
  
$header['errmsg']  = $errmsg;
  
$header['content'] = $content;
  return 
$header;
}

  
$url 'http://somesite.ru/cgi/wocking.php';
  
$result get_web_page$url );
  
$html $result['content'];
  echo 
$html;
      
 
$pos StrPos($html,"Работа закончена");
  if ( 
$pos === false ) { 
    echo 
'Авторизация провалилась';
    }  
 else {
      echo 
'Авторизация прошла успешно';
    }
?></div>
Эм... т.о. отказался от авторизации в самом парсере и теперь принцип следующий: заходим в игру, браузер (в моем случае Опера, но это не важно) получает и записывает куки сайта Cookie1 и Cookie2, я ручками захожу в настройки cookies в браузере, беру оттуда значения, подставляю себе и все работает т.е. страницы парсяться.

Но может кто подскажет как научить парсер брать кукисы самому без ручного ввода оО
DEMOgoT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
CURL gofkane PHP 2 29.08.2011 14:53
проблема с печеньками =) Qaliti PHP 7 09.01.2011 14:21
Работа с компонентом SAX парсинг XML SoftKoc Компоненты Delphi 0 30.12.2010 13:44
curl + js topsecretx PHP 0 18.05.2009 21:23
Работа со страницами - curl + file_get_contents + cookie domovoi PHP 6 01.03.2009 00:53