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

Curl отправляет GET вместо POST после редиректа?

Всем привет.


Пытаюсь отправить POST запрос на удаленный сайт при помощи curl. Удаленный сайт делает редирект (на свою https версию). Curl вместо того чтобы послать POST на новый url, посылает GET без параметров. Как заставить curl послать POST?


Если посылаю POST на https версию (то есть редиректа не происходит), все отрабатывает нормально.


Функция, которая посылает запрос:
function curl_query($url, $username, $password, $payload) {
    $additionalHeaders = "";
    $process = curl_init($url);
    curl_setopt($process, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded',$additionalHeaders));
    curl_setopt($process, CURLOPT_HEADER, false);
    curl_setopt($process, CURLOPT_USERPWD, $username . ":" . $password);
    curl_setopt($process, CURLOPT_TIMEOUT, 30);
    curl_setopt($process, CURLOPT_POST, 1);
    curl_setopt($process, CURLOPT_POSTFIELDS, $payload);
    curl_setopt($process, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($process, CURLOPT_MAXREDIRS, 4);
    curl_setopt($process, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($process, CURLOPT_SSL_VERIFYPEER, false);
    $return = curl_exec($process);
    return $return;
}



Часть .htaccess, обеспечивающая редирект:
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
  • Вопрос задан
  • 5512 просмотров
Подписаться 6 Оценить Комментировать
Решения вопроса 1
@mayorovp
При редиректе надо использовать код 307, чтобы сохранить тип запроса.
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=307]


Вот так, если я ничего не напутал.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
BuriK666
@BuriK666
Компьютерный псих
А почему должен отправляться POST запрос после редиректа? То что отправляется GET / это нормально и правильно (согласно RFC)
Ответ написан
Комментировать
@WEBIVAN
Все просто: обрабатывать редиректы вручную, а не через
curl_setopt($process, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($process, CURLOPT_MAXREDIRS, 4);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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