Как авторизоваться с помощью AJAX из PHP?

#php #ajax #authorization #guzzle

#php #ajax #авторизация #жрать

Вопрос:

Как я могу авторизоваться с помощью PHP (с помощью Guzzle) в https://my.tiu.ru/cabinet/sign-in ? Я проверил — он использует AJAX для фиксации формы авторизации.

Я пытался использовать некоторые JS-скрипты для входа в систему из консоли браузера (оба скрипта работают):

     $.ajax({
        url: 'https://my.tiu.ru/cabinet/sign-in',
        type: 'POST',
        data: { phone_email: 'ifnnfadl@emltmp.com', password: 'MKO09ijn', email: 'ifnnfadl@emltmp.com'},
        success: function(data) {
            console.log(data);
        }
    });

    $.ajax({
        url: 'https://my.tiu.ru/cabinet/auth/phone_login',
        type: 'POST',
        data: { phone_email: 'ifnnfadl@emltmp.com', password: 'MKO09ijn'},
        success: function(data) {
            console.log(data);
        }
    });
  

Но простой PHP-скрипт не:

 try {
    $client = new GuzzleHttpClient([
        'base_uri' => 'https://my.tiu.ru',
        'verify'    => false,
        'cookies'  => true,
        'headers'  => [
            'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36',
        ]
    ]);

    $auth_page = $client->request('GET', '/cabinet/sign-in');
    // var_dump($auth_page->getBody()->getContents());

    // $login = $client->request('POST', '/cabinet/auth/phone_login', [
    //  'form_params' => [
    //      'phone_email' => 'ifnnfadl@emltmp.com',
    //      'email'       => 'ifnnfadl@emltmp.com',
    //      'password'    => 'MKO09ijn'
    //  ]
    // ]);
    // var_dump($login->getBody()->getContents());

    $login = $client->request('POST', '/cabinet/sign-in', [
        'form_params' => [
            'phone_email' => 'ifnnfadl@emltmp.com',
            'email'       => 'ifnnfadl@emltmp.com',
            'password'    => 'MKO09ijn'
        ]
    ]);
    var_dump($login->getBody()->getContents());
}
catch (GuzzleHttpExceptionRequestException$e) {
    echo GuzzleHttpPsr7str($e->getRequest());
    if ($e->hasResponse()) {
        echo GuzzleHttpPsr7str($e->getResponse());
    }
}
  

Он возвращает только ошибку 403

P.S. логин и пароль являются временными, не стесняйтесь их использовать

Комментарии:

1. почему логин находится внутри массива «form_params»?

2. хм? эти параметры необходимы для входа в систему

3. да, но почему они внутри массива? 'form_params' => [1,2,3] это не то же самое, [1,2,3] что вам пришлось бы заглянуть внутрь 'form_params' , чтобы получить значения

4. docs.guzzlephp.org/en/latest/request-options.html#form-params

5. я не слишком разбираюсь во всей этой штуке с ssl, но если ваш адресный протокол https: , вам не обязательно использовать 'verify' => true,