Как передать длинный POST запрос

Мне необходимо войти в свой аккаунт на определенном сайте. Вместе в логином и паролем необходимо передавать ключ, который генерируется при каждой загрузке страницы авторизиции. Проблема заключается в том, что этот ключ очень длинный (4621 символ). Я пробовал file_get_contents, url просто обрезается и не отправляется полностью. Пробовал curl, тоже не работает. (запрос работает если вписать его в адресную строку руками)

$parameters = [
    'username'      => 'mylogin',
    'password'      => 'mypass',
    'execution'     => $value,
    '_eventId'      => 'submit',
    'geolocation'   => ''
];


$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://cas.spbstu.ru/login?');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($parameters));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$curl_result = curl_exec($ch);

curl_close($ch);


Подскажите что сделать, или что погуглить в такой ситуации.


Ответы (2 шт):

Автор решения: Евгений Мишанин

Сложно дать ответ если не знаешь что не работает, тк вы не написали что выдает тот же curl запрос. Попробуйте добавить в запрос заголовки:

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate, br
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
Cache-Control: max-age=0
Connection: keep-alive
Content-Length: 1678
Content-Type: application/x-www-form-urlencoded
Host: cas.spbstu.ru
Origin: https://cas.spbstu.ru
Referer: https://cas.spbstu.ru/login
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36
→ Ссылка
Автор решения: Макс Максимус

Тут не обязательно использовать curl. Можно так:

// записываете в переменную ваш длинный секретный ключ
$yourSecretKey = file_get_contents(...);
// либо другим способом 

// отправляете ваш ключ и другие необходимые данные методом POST
$result = file_get_contents('https://cas.spbstu.ru/login', false, stream_context_create([
    'http' => [
        'method'  => 'POST',
        'header'  => 'Content-type: application/x-www-form-urlencoded',
        'content' => http_build_query(['secret' => $yourSecretKey])
    ]
]));

Я тестировал с отправкой 6Mb, все работает корректно, ничего не обрезается. Главное чтоб настойки post_max_size в php.ini позволяли отправлять такой размер данных

→ Ссылка