|
|
|
| Здравствуйте,
проблема возникла буквально несколько дней назад. До этой поры скрипт по авторизации в системе работал нормально и необходимые данные получались.
В цикле перебираются аккаунты, под их логином/паролем авторизовуюсь в системе LBC (Local Business Center), и затем захожу как авторизованный пользователь на главную страницу.
Вот скрипт:
$username = $account->account_name;
$password = $account->account_password;
$postdata="Email=$username&Passwd=$password&service=lbc&gl=US&hl=en-US&continue=http://www.google.com/local/add/businessCenter?hl=en-US&gl=US";
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL,"https://www.google.com/accounts/ServiceLoginAuth?service=lbc");
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLINFO_HEADER_OUT, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(BASEPATH).'/files/cookiefile.txt');
$AskApache_result = curl_exec($ch);
curl_setopt($ch, CURLOPT_URL, "http://www.google.com/local/add/businessCenter?hl=en-US&gl=US");
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(BASEPATH).'/files/cookiefile.txt');
$result = curl_exec($ch);
curl_close($ch);
|
До какого-то момента этот скрипт работал правильно. В переменной $AskApache_result - возвращается страница, на которой необходимо пройти авторизацию с нужными coockie, которые сохранялись в файл. Затем я заходил на нужную мне страницу с сохраненными ранее coockie и получал содержимое главной страницы сервиса - требуемый результат.
Но после того, как я удалил старый файл coockies.txt (на сколько я помню, там было больше информации, чем сохраняется сейчас при авторизации) - авторизацию пройти не могу. В переменную $result возвращается:
HTTP/1.1 302 Moved Temporarily
Content-Type: text/html; charset=UTF-8
Location: https://www.google.com/accounts/ServiceLogin?continue=http%3A%2F%2Fwww.google.com%2Flocal%2Fadd%2FbusinessCenter%3Fhl%3Den-US%26gl%3DUS&service=lbc&hl=en-US&gl=US
Date: Sat, 17 Oct 2009 06:47:57 GMT
Expires: Sat, 17 Oct 2009 06:47:57 GMT
Cache-Control: private, max-age=0
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Server: GFE/2.0
Transfer-Encoding: chunked
<HTML>
<HEAD>
<TITLE>Moved Temporarily</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Moved Temporarily</H1>
The document has moved <A HREF="https://www.google.com/accounts/ServiceLogin?continue=http%3A%2F%2Fwww.google.com%2Flocal%2Fadd%2FbusinessCenter%3Fhl%3Den-US%26gl%3DUS&service=lbc&hl=en-US&gl=US">here</A>.
</BODY>
</HTML>
|
Если скрипт работал нормально, то на ум приходит только один вариант: что-то было изменено в самой системе авторизации и в итоге я сохраняю/передаю не все данные.
Перепробовал массу вариантов, пока никаких положительных результатов.
Был вариант использования Auth и SID, но пока не знаю, как его использовать.
Буду благодарен любым новым идеям.
Заранее благодарен,
Денис | |
|
|
|
|
|
|
|
для: Popov
(17.10.2009 в 10:19)
| |
HTTP/1.1 302 Moved Temporarily
|
Это означает, что страница перемещена вот сюда:
Location: https://www.google.com/accounts/ServiceLogin?continue=http%3A%2F%2Fwww.google.com%2Flocal%2Fadd%2FbusinessCenter%3Fhl%3Den-US%26gl%3DUS&service=lbc&hl=en-US&gl=US
|
Рекурсивно идите и все.
или измените
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 0)
|
на
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1)
|
| |
|
|
|
|
|
|
|
для: Ramilka
(19.10.2009 в 13:17)
| | Не совсем. В поисках решения помог снифер.
При попадании на страницу авторизации гугл сохраняет первые куки. Если их удалить, то при вводе логина/пароля Гугл сообщает, что куки не включены.
Так вот эти куки и сохранялись у меня в файле. Их же нужно было считать с шапки страницы и прикрепить к строке post-запроса. В дополнение ко всему, в пост-запрос я включил все поля, в т.ч. hidden, данные которых учитывались при авторизации.
$postdata="continue=http%3A%2F%2Fwww.google.com%2Flocal%2Fadd%2FbusinessCenter%3Fhl%3Den-US%26gl%3DUS&service=lbc&hl=en-US&gl=US&Email=".$username."&Passwd=".$password."&PersistentCookie=yes&rmShown=1&signIn=Sign+in&asts=";
$ch = curl_init('https://www.google.com/accounts/LoginAuth');
curl_setopt ($ch, CURLOPT_HEADER, 1);
curl_setopt ($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3');
curl_setopt ($ch, CURLOPT_REFERER, 'https://www.google.com/accounts/ServiceLogin?continue=http%3A%2F%2Fwww.google.com%2Flocal%2Fadd%2FbusinessCenter%3Fhl%3Den-US%26gl%3DUS&service=lbc&hl=en-US&gl=US');
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_COOKIEJAR, dirname(BASEPATH).'/files/cookiefile.txt');
curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt ($ch, CURLOPT_HTTPHEADER, array('Expect:'));
curl_exec ($ch);
$result = curl_multi_getcontent ($ch);
preg_match('/GALX=(.*)/', $result, $matches);
$is_found = preg_match("/GALX=(.*?);Path/si", $matches[0], $info);
curl_setopt ($ch, CURLOPT_URL,"https://www.google.com/accounts/ServiceLoginAuth?service=lbc");
curl_setopt($ch, CURLOPT_REFERER, "https://www.google.com/accounts/ServiceLogin?continue=http%3A%2F%2Fwww.google.com%2Flocal%2Fadd%2FbusinessCenter%3Fhl%3Den-US%26gl%3DUS&service=lbc&hl=en-US&gl=US");
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3");
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_HEADER, 1);
curl_setopt ($ch, CURLINFO_HEADER_OUT, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata."&GALX=".$info[1]);
curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(BASEPATH).'/files/cookiefile.txt');
$AskApache_result = curl_exec($ch);
curl_setopt($ch, CURLOPT_URL, "http://www.google.com/local/add/businessCenter?hl=en-US&gl=US");
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(BASEPATH).'/files/cookiefile.txt');
$result = curl_exec($ch);
|
В итоге, в файле coockies.txt я получил большой список нужных мне кукисов и дальше все пошло отлично.
Выложил код, т.к. буду рад, если кому-то это пригодится. В поисках нужной мне информации очень много примеров авторизации на gmail, Google Analystics. Но нужной мне так и не нашел. К тому же, как стало известно, Google периодически меняет систему авторизации. | |
|
|
|
|
автор: Donbernardo (02.05.2010 в 19:21) |
|
|
для: Popov
(19.10.2009 в 16:05)
| | Спасибо за скрипт, очень помог. Сам бы не дошел до этого GALX | |
|
|
|
|