Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Сеть > Авторизация на сайте.


Автор: VingradFan 8.12.2011, 14:42
Добрый день. Прошу прощения, если вопрос совсем глупый, киньте в меня хорошей, годной ссылкой для абсолютных чайников. Спасибо!

Поставлена задача написать программу для автоматической рассылки сообщений в соц. сети вконтакте. Как я понимаю суть задачи, мой пхп скрипт должен определенному скрипту на сервере контакта передать определенные POST данные. Для этого мой скрипт должен предварительно пройти авторизацию на сайте. Так?

Собственно остановился на процессе авторизации. Прочитал вот http://forum.vingrad.ru/topic-103996.html, скачал HTTP analyzeer, посмотрел, что-куда отправляется, написал скрипт.

Анализатор дал мне следующую информацию:
===HEADERS===
Код

Content-Length:159
Content-Type:application/x-www-form-urlencoded
Accept-Encoding:gzip, deflate
Referer:http://vkontakte.ru/al_index.php?act=auth_frame
Connection:keep-alive
Host:login.vk.com
User-Agent:Mozilla/5.0 (Windows NT 5.1; rv:8.0.1) Gecko/20100101 Firefox/8.0.1
(Request-Line):POST /?act=login HTTP/1.1
Cookie:remixlang=0; remixchk=5; remixsid=ddc698647b2cab3e4cb01832c70356565ea411d62e126fbe9cadb3af70196013
Accept-Language:ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset:windows-1251,utf-8;q=0.7,*;q=0.7



===POST DATA===
Код

act=login
q=1
al_frame=1
expire=
captcha_sid=
captcha_key=
from_host=vkontakte.ru
ip_h=9408d78c019b87455b
email=*
pass=*




Код

<?php
    $socketOpen = fsockopen    (    'login.vk.com',80,$errorNumber,$errorMessage,5);
    if ( $socketOpen ) {
        $header = "POST /?act=login HTTP/1.1\n";
        $header .= "Host: login.vk.com\n";
        $header .= "Content-Length: 159\n";
        $header .= "Content-Type: application/x-www-form-urlencoded\n";
        $header .= "Accept-Encoding: gzip, deflate\n";
        $header .= "Referer: http://vkontakte.ru/al_index.php?act=auth_frame\n";
        $header .= "Connection: keep-alive\n";
        $header .= "User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:8.0.1) Gecko/20100101 Firefox/8.0.1\n";
        $header .= "Cookie: remixlang=0; remixchk=5; remixsid=ddc698647b2cab3e4cb02341832c7035ea342411d62e126fbe9cadb3af70196013\n";
        $header .= "Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3\n";
        $header .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\n";
        $header .= "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\n\n";
        
        $header .= "act=login&";
        $header .= "q=1&";
        $header .= "al_frame=1&";
        $header .= "expire=&";
        $header .= "captcha_sid=&";
        $header .= "captcha_key=&";
        $header .= "from_host=vkontakte.ru&";
        $header .= "ip_h=9408d78c034419b87455b&";
        $header .= "email=моя_почта&";
        $header .= "pass=мой_пароль";
    
        fputs ( $socketOpen , $header );

        fclose ( $socketOpen );        
    }
?>


Скрипт выполняется без ошибок, но я не могу понять, как посмотреть результат его работы, произошла ли авторизация или нет. Когда дописываю
Код

        while( !feof ( $socketOpen ) ) {
            echo fgets ( $socketOpen );
        }

Программа останавливается по таймауту.
Подскпажите, пожалуйста, как понять, произошла ли авторизация. Спасибо!

Автор: $дмитрий 8.12.2011, 15:06
Я бы по другому авторизовывал http://habrahabr.ru/blogs/social_networks/117211/

Автор: VingradFan 8.12.2011, 15:09
Спасибо за ссылку. Но хотелось бы научиться универсальным низкоуровневым методам, а не использовать частные "костыли".
Спасибо!

Автор: Nigel 8.12.2011, 19:15
Откажитесь от задачи. В дальнейшем столкнетесь с проблемой обхода капчи, контакт выставляет ее после отсылки n сообщений. Потом столкнетесь, что нельзя открывать n соединений в секунду.

Автор: VingradFan 8.12.2011, 23:02
Цитата(Nigel @ 8.12.2011,  19:15)
Откажитесь от задачи. В дальнейшем столкнетесь с проблемой обхода капчи, контакт выставляет ее после отсылки n сообщений. Потом столкнетесь, что нельзя открывать n соединений в секунду.

Задача - учебная. Для знакомства с сокетами. Тем более, что при постинге у себя на стене никакой капчи нет.

Автор: $дмитрий 8.12.2011, 23:29
Цитата

Программа останавливается по таймауту

Попробуй сменить версию протокола на HTTP/1.0

Цитата

Задача - учебная

И первый урок. Так писать нерационально
Код

        $header .= "Host: login.vk.com\n";
        $header .= "Content-Length: 159\n";
        $header .= "Content-Type: application/x-www-form-urlencoded\n";
        $header .= "Accept-Encoding: gzip, deflate\n";
        $header .= "Referer: http://vkontakte.ru/al_index.php?act=auth_frame\n";
        $header .= "Connection: keep-alive\n";


Цитата

Для знакомства с сокетами

В первый раз, обычно, пробуют получить контент с какого-либо сайта


 

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