[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Трабл с эммуляцией браузера
alex_a
Привет, дорогие друзья!!!

Подскажите, уже подзапарился((( в общем суть такова: у меня есть несколько платников по онлайн-играм(я зарегистрирован в биллинге). Человек, если заинтересовался игрой и хочет в нее поиграть, должен подписаться. Это делается через смс. Я хочу, чтобы весь процесс подписки шел на моих сайтах(сейчас там стоит форма, в которую чел. вводит свой номер телефона. ПРи нажатии на кнопку "отправить", он попадает на сам сайт "Мегафона" или "Билайна". Я хочу, чтобы все эти шаги, которые делаются на сайтах сотовых операторов , были на моем сайте, т.е., чтобы пользователь не покидал мои сайты.). Для этих целей пишу парсер. Первый шаг у меня готовый: юзер вводит свой номер телефона и жмет на "Отправить", данные передаются скрипту, которые POST- методом шлет это все на сайт сотовых операторов и вытягивает оттуда форму с капчей, плюс запоминает куки. На втором шаге он вводит просто капчу в форму(т.е., чтобы он посмотрел, правильно ли он ввел телефон). Вот тут вся проблема. По идее он вводит капчу, ему шлется смс, он переходит на 3 этап, где должен ввести код, полученный на телефон. У меня постоянно выдает, что введена неправильно капча. Шлю все, что в снифере ФФ "LiveHTTPHeaders". Для работы юзаю CURL.

Вот сам код:



$mysite="saytik_test.ru";
$url="http://beeline.subscriptions.incoreweb.ru/svk-web/inc?msisdn=9656700000&serviceid=".$mysite."&returnurl=http%3A%2F%2Fuserend.info%2Fredir%2F%3Fhash%3D53bda668fc588d5af44570da3b51f152%26hash2%3D45967f9ac280d30bbfac5504ec1a1762%26sid%3D4928%26redir%3Dhttp%253A%252F%252F".$mysite."%252F%252Ffinish.php";
$ua="Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2";
$cook=$_SERVER['DOCUMENT_ROOT']."/mtz_beeline/w.txt";


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, $ua);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cook);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cook);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
$ster = curl_exec($ch);


preg_match('#location.*?$#ims', $ster, $arr_matches);
$matches=preg_replace('#location.*?http#ims', 'http', $arr_matches[0]);
curl_setopt($ch, CURLOPT_URL, trim($matches));
curl_setopt($ch, CURLOPT_REFERER, $url);
curl_setopt($ch, CURLOPT_USERAGENT, $ua);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cook);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cook);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$ster1 = curl_exec($ch);



$post=http_build_query(array("verify_code"=>"9191", "get_code"=>" OK "));

$url_to_send_post = "http://signup.beeline.ru/index.php?r=site/stepone";
$ref_post = $url_to_send_post;

curl_setopt($ch, CURLOPT_URL, $url_to_send_post);
curl_setopt($ch, CURLOPT_USERAGENT, $ua);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cook);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cook);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
$ster2 = curl_exec($ch);



preg_match('#<img.*?>#ims', $ster1, $arr);
preg_match('#<img.*?>#ims', $ster2, $arr1);
$src1=preg_replace('#(<.*?src=\")|(<.*?src=\')#ims', '', $arr[0]);
$src="http://signup.beeline.ru".preg_replace('#(\".*?.+)|(\'.*?.+)#ims', '', $src1);



preg_match('#action=\".*?\"#ims', $ster2, $arr2);
$action = preg_replace('#action=\"#ims', 'action="http://signup.beeline.ru', $arr2[0]);
$forms = preg_replace('#<form.*?>#ims', '<form '.$action.' method="POST">', $ster2);


$src1=preg_replace('#(<.*?src=\")|(<.*?src=\')#ims', '', $arr1[0]);
$src="http://signup.beeline.ru".preg_replace('#(\".*?.+)|(\'.*?.+)#ims', '', $src1);

echo iconv('utf-8', 'cp1251', $forms);
echo "<img src=\"".$src."\">";
curl_close($ch);




Вот данные снифера(то, что шлется на 2 шаге, если данные вводить вручную на сайте сотового оператора)
:
[code=htmlphp]

http://signup.beeline.ru/index.php?r=site/stepone

POST /index.php?r=site/stepone HTTP/1.1
Host: signup.beeline.ru
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Referer: http://signup.beeline.ru/index.php?r=site/...0fd2fcc6250395b
Cookie: PHPSESSID=8dr784ed2bvghvnucoejhrivd0
Content-Type: application/x-www-form-urlencoded
Content-Length: 34
verify_code=8107&get_code=+++OK+++

[/code]

Вот это verify_code=8107&get_code=+++OK+++ я в скрипте шлю в пост-запросе. "verify_code" - это капча , get_code - это кнопка. Вот, если это отсылать в скрипте, то будет на сайте предупреждение, что введена неправильная капча. Т.е., какую бы я не ввел, всегда будет выдавать, что не правильная. Но, если в скрипт добавить такой кусок:

curl_setopt($ch, CURLOPT_COOKIE,PHPSESSID=PHPSESSID=8dr784ed2bvghvnucoejhrivd0);, то все отлично и скрипт переходит на последний этап. Т.е., если я тупо вставлю в скрипт куку, которую я беру из снифера файерфокса, то все работает. Получается, картинка привяз. Я не пойму: куки же в самом скрипте записываются и отправляются, но скрипт не работает. Если вставить тупо куку из снифера, работает. Ребята, где ошибся. Подскажите, пожалуйста. Буду очень благодарен
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.