Задать вопрос

301 moved permanently при попытке авторизоваться в Qiwi c помощью Curl. Как исправить?

Здравствуйте. Ещё вчера, я реализовал авторизацию в qiwi.com, используя Curl. Но сегодня(14.09.2015) почему-то вместо прекраснейшей страницы с информацией о балансе и состоянии аккаунта получил в ответ 301 moved permanently.
require 'Curl.php';
    include 'simple_html_dom.php';	
    use Curl;
    ini_set("max_execution_time", "60");
    $curl = new Curl();
 
    $curl->setOpt(CURLOPT_SSL_VERIFYPEER, 0);
    $curl->setOpt(CURLOPT_FOLLOWLOCATION, 0);
    $curl->setCookieFile('cookie.txt');
    $curl->setHeader('Content-Type', 'application/json');
    $curl->setHeader('X-Requested-With', 'XMLHttpRequest');
    
 
    $data = array(
        'login' => '',
        'password' => '',//свои логин и пароль я потёр перед написанием вопроса
    );   
 
 
    $res = $curl->post('https://auth.qiwi.com/cas/tgts', json_encode($data));
 
    $TICKET = $res->entity->ticket;
 
    $data = array(
        "ticket" => $TICKET,
        "service" => "https://visa.qiwi.com/j_spring_cas_security_check",
    );
 
    $res = $curl->post('https://auth.qiwi.com/cas/sts', json_encode($data));
    
 
    $data = array(
        "ticket" => $TICKET,
        "service" => "https://visa.qiwi.com/j_spring_cas_security_check",
    );
 
    
    $res = $curl->post('https://auth.qiwi.com/cas/sts', json_encode($data));
    
    $TICKET = $res->entity->ticket;    
    $data = array(
        "ticket" => $TICKET,
    );
   // echo $TICKET;
    $res = $curl->get('https://visa.qiwi.com/j_spring_cas_security_check?ticket='.$TICKET); 
    $res = $curl->get('https://visa.qiwi.com/report/list.action?type=3'); 	
    $res = $curl->post('https://visa.qiwi.com/person/state.action');	
    echo $res; 
    if (isset($res->data->balances->RUB)) {
        echo "Balance  =".$res->data->balances->RUB.'<br>';
       // exit(0);
    } else {
        echo 'O\F8\E8\E1\EA\E0';
    }	
    $res = $curl->post('https://visa.qiwi.com/report/list.action?type=3');	
	$html = str_get_html($res);	
	echo $html;	
	if(count($html->find('.reports')))
       foreach($html->find('.reports') as $div)
	   {
		     echo "found";
             //echo $div->innertext;
			 $StrParsed = $div->innertext;
	   }


Следует добавить, что я использую php-curl-class, который взял по ссылке: https://github.com/php-curl-class/php-curl-class, но, думаю, роли в моей проблеме это не играет.
Добавлю также, что когда я меняю значение второго параметра на ненулевое, меня предательски возвращает на страницу авторизации:
$curl->setOpt(CURLOPT_FOLLOWLOCATION, 0);
Проверка логина и пароля, кстати, проходит успешно. Об этом свидетельствует получение "ticket".
В чем состоит проблема и как её решить? Неужели алгоритм авторизации снова подкорректировали?
  • Вопрос задан
  • 1896 просмотров
Подписаться 6 Оценить Комментировать
Решения вопроса 1
@shad541
Есть решение!
require_once 'Curl.php'; //https://github.com/php-curl-class/php-curl-class

$curl = new \Curl\Curl();
$curl->setOpt(CURLOPT_SSL_VERIFYPEER, 0);
$curl->setCookieFile('cookie.txt');
$curl->setHeader('Content-Type', 'application/json');
$curl->setHeader('X-Requested-With', 'XMLHttpRequest');
$curl->setUserAgent('Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:40.0) Gecko/20100101 Firefox/40.0');

// Получаем TGT-тикет по логину и паролю
$res = json_decode($curl->post('https://auth.qiwi.com/cas/tgts', json_encode(array(
    'login' => '+***',
    'password' => '***'
))));
$TgtTicket = $res->entity->ticket;

// Получаем пару ST-тикетов по TGT-тикету
// первый тикет не нужен, а вот второй понадобится
$curl->post('https://auth.qiwi.com/cas/sts', json_encode(array(
    'ticket' => $TgtTicket,
    'service' => 'https://qiwi.com/j_spring_cas_security_check',
)));

$res = json_decode($curl->post('https://auth.qiwi.com/cas/sts', json_encode(array(
    'ticket' => $TgtTicket,
    'service' => 'https://qiwi.com/j_spring_cas_security_check',
))));
$STticket = $res->entity->ticket;

// выполняем чек
$res = $curl->get('https://qiwi.com/j_spring_cas_security_check?ticket='.$STticket);
// запрос к проксе
$res = $curl->get('https://auth.qiwi.com/app/proxy?v=1');

// запрос отчета за неделю
$curl->setHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
$reports = $curl->post('https://qiwi.com/user/report/list.action', array(
    'type' => '3'
));
// возвращаем Content-Type назад
$curl->setHeader('Content-Type', 'application/json');

print_r($reports);  // обработка результатов

// запрос баланса etc
$res = $curl->post('https://qiwi.com/person/state.action');
print_r($res); // обработка результатов

$curl->close();
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
$curl->setOpt(CURLOPT_FOLLOWLOCATION, true);
$curl->setOpt(CURLOPT_RETURNTRANSFER, true);
$curl->setOpt(CURLOPT_AUTOREFERER, true);
$curl->setOpt(CURLOPT_SSL_VERIFYPEER,false);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы