@NeTLeaDeR

Из-за чего появляется эта ошибка?

Всем привет. Пытаюсь авторизоваться на сайте, но после отсылки POST запроса получаю это:

Bad Request

Your browser sent a request that this server could not understand.
Reference #7.e4d9ef50.1482352464.3d14f06


Данные 100% отправляются, т.к. случайно локнул себе аккаунт,указав неверный пароль в скрипте.

Из-за чего такая ошибка возникает?

$curl = curl_init();
        curl_setopt($curl, CURLOPT_COOKIEJAR, "cookies.txt");
        curl_setopt($curl, CURLOPT_COOKIEFILE, "cookies.txt"); 
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); 
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3'); 
        curl_setopt($curl, CURLOPT_URL, 'https://my.asos.com'); 
        $html = curl_exec($curl);
        curl_close($curl);
        
        preg_match('/<input id="idsrv_xsrf" name="idsrv.xsrf" type="hidden" value="(.*)"/',$html,$matches);
        $idsrv_xsrf = $matches[1];
        preg_match('/signin=(.*)&amp;checkout=False&amp;/',$html,$matches);
        
        $link = 'https://my.asos.com/identity/login?signin='.$matches[1].'&checkout=False&showAllOptions=False';
        
        $post = 'idsrv.xsrf='.$idsrv_xsrf.'&Username=example@inbox.ru&Password=password';
        
        
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $link);
        curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies.txt");
        curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies.txt"); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3');
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
        $html = curl_exec($ch);
        curl_close($ch);


в $link - ссылка на обработчик. Да, и ещё авторизация проходит на поддомене (my.sitename.com/signin - авторизация, а после неё редирект на sitename.com с кучей гет-параметров, потом открывается главная sitename.com )
Это весь мой код. https://my.asos.com - сайт авторизации. Вообще хочу спарсить состояние готовности заказа, но для начала просто авторизоваться. Если подскажете что я делаю неправильно - буду очень благодарен.
  • Вопрос задан
  • 779 просмотров
Решения вопроса 1
usdglander
@usdglander Куратор тега PHP
Yipee-ki-yay
Попробуйте использовать http_build_query для формирования $post.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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