Авторизация на ask.fm

291
05 марта 2017, 08:56

Здравствуйте.

Хочу написать скрипт авторизации на ask.fm, но возникла проблема уже на первом шаге. В общем, уже много идентичных проблем было, в связи с чем я бросал работу над этим скриптом, но в этот раз решил написать сюда. Ниже приведу свой скрипт. В ответе говорит, что что-то пошло не так, но я думаю, что это какая-то защита. Я новичок в авторизации на сайтах через php cUrl, поэтому прошу отнестись лояльно к этому вопросу :)

<?php
function get($url = null, $data = array(), $cookie = null) {
    $ch = curl_init();
    $headers = array(
        "accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
        "accept-language:ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4",
        "user-agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.3.2924.87 Safari/537.36"
    );
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
    if(isset($data)) {
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    }
    if(isset($cookie)) {
        curl_setopt($ch, CURLOPT_COOKIE, $cookie);
    }
    $response = curl_exec($ch);
    preg_match_all("/Set-Cookie: (.*?);/", $response, $cookie);
    $content = substr($response, curl_getinfo($ch, CURLINFO_HEADER_SIZE));
    $header = substr($response, 0, curl_getinfo($ch, CURLINFO_HEADER_SIZE));
    return array(
        "content" => $content, 
        "header"  => $header, 
        "cookie"  => implode(";", $cookie[1])
    );
}
$homepage = get("https://ask.fm/");
print_r($homepage);
?>
Answer 1

Попробуйте вот так (источник):

<?php
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://ask.fm');
curl_setopt($curl, CURLOPT_USERAGENT, "Opera/10.00 (Windows NT 5.1; U; ru) Presto/2.2.0");
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
curl_setopt($curl, CURLOPT_COOKIEJAR, 'cook.txt');
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$html = curl_exec($curl);
curl_close($curl);
preg_match('/var AUTH_TOKEN = "([\w\W]+)";/Ui',$html,$matches);
$token = $matches[1];
$post = array(
    'authenticity_token' => $token,
    'login' => 'myUsername',
    'password' => 'myPassword',
);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://ask.fm/session');
curl_setopt($curl, CURLOPT_USERAGENT, "Opera/10.00 (Windows NT 5.1; U; ru) Presto/2.2.0");
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
curl_setopt($curl, CURLOPT_COOKIEJAR, 'cook.txt');
curl_setopt($curl, CURLOPT_COOKIEFILE, 'cook.txt');
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
curl_exec($curl);
curl_close($curl);
?>
Answer 2

Получить страницу можно вот так:

    class Ask {
        private $userAgent ;
        private $login = null;
        private $password = null;
        private $url = null;
        private $responce = null;
        private function utfToWin($text) {
            $text = iconv('UTF-8', 'WINDOWS-1251', $text);
            return $text;
        }
        function __construct($login, $password, $url) {
            $this->userAgent = $_SERVER['HTTP_USER_AGENT'];
            $this->login = $login;
            $this->password = $password;
            $this->url = $url;
        }
        private function curl($url, $post = false) {
            $curl = curl_init($url);
            curl_setopt($curl, CURLOPT_COOKIEJAR, 'CookFile');
            curl_setopt($curl, CURLOPT_COOKIEFILE, 'CookFile');
            curl_setopt($curl, CURLOPT_USERAGENT, $this->userAgent);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
            curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($curl, CURLOPT_TIMEOUT, 10);
            if ($post) {
                curl_setopt($curl, CURLOPT_POST, true);
                curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
            }
            $res = curl_exec($curl);
            curl_close($curl);
            return $res;
        }

        function run() {
            $this->responce = $this->utfToWin($this->curl('http://ask.fm'));
            return $this;
        }
        public function  getResponse() {
            return $this->responce;
        }

    }
    $ask = new Ask('login', 'pass', 'http://ask.fm');
    var_dump( $ask->run()->getResponse());

Ну а там токен вроде в теге <meta name="csrf-token" content="P1ZQiHqz3EBcnLCXqYIsvUI+dfjO6gnOAzlpigRgPgooZbzMVakLW5PgmRhRS82c3kKmRLl9AM4P/3xFPmdMYA==" /> находиться.

READ ALSO
как работать с данными из двух .cpp

как работать с данными из двух .cpp

Создал проект, который состоит из двух окон : в первом окне заполняем переменные , в втором мы выводим заполненные переменныеВ одном исполняемом...

256
Вставка точки в полигон

Вставка точки в полигон

Есть некоторая ломаная кривая, заданная в виде набора точекПытаюсь придумать алгоритм вставки новой точки в эту кривую

254
Книги по Windows Forms C++

Книги по Windows Forms C++

Посоветуйте, пожалуйста, книги по Windows Forms C++

328