Как передать длинный 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 позволяли отправлять такой размер данных