Хочу автоматически заходить на сервисы гугла, но столкнулся с тем что в форме авторизации есть один параметр, называемый GALX, который генерит типа сессий. Подскажите как обойти (может кто уже обошёл давно??). HTML: <form id="gaia_loginform" action="https://www.google.com/accounts/LoginAuth" method="post" onsubmit="return(gaia_onLoginSubmit());"> <input type="hidden" name="continue" id="continue" value="https://www.google.com/" /> <input type="hidden" name="dsh" id="dsh" value="7256430144203676232" /> <input type="hidden" name="hl" id="hl" value="ru" /> [color=red]<input type="hidden" name="GALX" value="eOG7gE0FeAY" />[/color] <input type="text" name="Email" id="Email" size="18" value="" class='gaia le val'/> <input type="password" name="Passwd" id="Passwd" size="18" class="gaia le val"/> <input type="checkbox" name="PersistentCookie" id="PersistentCookie" value="yes" checked='checked'/> <input type="hidden" name='rmShown' value="1" /> <input type="submit" class="gaia le button" name="signIn" id="signIn" value="Войти"/> <input type="hidden" name="asts" id="asts" value=""> </form> подскажите - очень надо
причём тут блевани? блевать можно от чего хочешь, а пример посмотреть за неимением других вполне реально
блевать придётся против своей воли =) а как пример нужно смотреть доки по Http и снифер хотя помнится лазил я на почту в гугле. чёт не помню эту переменную
Хм.. нарыл кое-что.. PHP: class google{ public $cookiejar; public $logged_in; private $ch; public function __construct(){ $this->logged_in = false; $this->cookiejar = "/tmp/tmp_cookies"; } private function posterize($post){ $postv = ''; foreach($post as $key=>$val){ $postv .= $key .'='.$val.'&'; } return $postv; } private function clean($data){ $data = preg_replace("/\r|\n/","",$data); $data = preg_replace("/\s+/"," ",$data); return $data; } public function init($service = ""){ $this->google_service = $service; $this->ch = curl_init(); curl_setopt($this->ch, CURLOPT_HEADER, 0); curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($this->ch, CURLOPT_COOKIEJAR, $this->cookiejar); curl_setopt($this->ch, CURLOPT_COOKIEFILE, $this->cookiejar); curl_setopt($this->ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"); // start a session $url = "https://www.google.com/accounts/ServiceLogin?service=".$this->google_service; curl_setopt($this->ch, CURLOPT_URL, $url); $data = $this->clean(curl_exec($this->ch)); // if(<input type="hidden" name="Email") if(preg_match('/<input type="hidden" name="Email" id="Email" value="([^"]+)"/',$data,$matches)){ // there is already an eamila ddress associated with this cookie $this->got_user_cookie = true; $this->got_user_cookie_email = $matches[1]; } //<input type="hidden" name="GALX" value="EeM8uSvHWCg" /> // this value is also in the cookie preg_match('/<input type="hidden" name="GALX" value="([^"]+)"/',$data,$matches); $this->google_galx = $matches[1]; } public function signin($username,$password){ $url = "https://www.google.com/accounts/ServiceLoginAuth"; curl_setopt($this->ch, CURLOPT_URL, $url); // login details $post = array( "GALX" => $this->google_galx, "Email" => $username, "Passwd" => $password, //"PersistentCookie" => "yes", "rmShown" => "1", "service" => $this->google_service, ); curl_setopt($this->ch, CURLOPT_POST, true); curl_setopt($this->ch, CURLOPT_POSTFIELDS, $this->posterize($post)); $data = $this->clean(curl_exec($this->ch)); curl_setopt($this->ch, CURLOPT_POST, false); curl_setopt($this->ch, CURLOPT_POSTFIELDS, false); if(preg_match('/LoginDoneHtml/',$data)){ // login success /*$url = "https://www.google.com/accounts/CheckCookie?chtml=LoginDoneHtml"; curl_setopt($this->ch, CURLOPT_URL, $url); $data = $this->clean(curl_exec($this->ch));*/ $this->logged_in = true; return true; }else{ // echo $data; // uncomment for debug return false; } } public function grab_url($url){ // grab and return the contents of the url // we pass along the authenticated cookie information // so this is really only useful for google.com url's (eg: web history export) curl_setopt($this->ch, CURLOPT_URL, $url); $data = curl_exec($this->ch); return $data; } }
на яндексе попроще, но эта надпись.... Внимание! Сайт ----- не принадлежит Яндексу. и т.д. типа этого: :mrgreen: Чую забанят за такое
openId Upd: и кстати, а чем не устроили стандартные средства в браузерах? пароль и логин они запоминают˙
OpenId позволяет иметь фактически одну учетную запись на много сервисов. Т.е. сервис не регистрирует тебя, а пользуется авторизацией OpenID провайдера.
Та-а-кс, а если у меня несколько аккаунтов на яндексе, врядли подойдёт? Я хочу просто из формы на своём сайте зайти одним кликом к примеру на почту, а с другого аккаунта на метрику... (с разных браузеров)
Нет, такое работать не будет А почему бы не связать все яндекс-аккаунты на один паспорт? там была вроде такая возможность.
хочу чтобы не только я заходил на эти аккаунты, а ещё те, которым я даю такой доступ, но чтобы они не вводили логин-пароль, а просто кликали на кнопку.
А это надо копать в сторону OAuth. Там есть такие возможности. Дать кому-то доступ без передачи своего логина и пароля. Вот реализовано ли это в гугло-яндексах - я не в курсе.
покопался на эту тему в гугле - вроде можно, но рыть ещё много придётся. К тому же вся документация на эту тему на инглише - голова уже кипит. А в яндексе уверен это исключено
Simpliest API это понятно. Просто не хочется вручную привязывать данные аналитика к графикам, к тому же сделать в точности как на гугле будет очень сложно (припаять все данные к крутой библиотеке графиков). Вобщем я попробовал использовать просто file_get_contents https://www.google.com/accounts/LoginAuth и... походу получилось. Таким образом мы открываем страницу со сгенерированным GALX и всё - автологин удался. Только я не понял в чём подвох... слетит наверное такая схема?
Понятия не имею. Я в таких случаях пытаюсь связаться с владельцем сервиса и выяснить границы разрешенного. Бывает, конечно, что запрещают даже те варианты, которые работают, но не являются "официальными" для их продукта, но это дело такое.