Как перейти с POST на GET в PHP CURL
Вопрос
Я попытался перейти с предыдущего запроса Post на запрос Get. Что предполагает получение, но в конечном итоге делает сообщение.
Я попробовал следующее в PHP:
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, null);
curl_setopt($curl_handle, CURLOPT_POST, FALSE);
curl_setopt($curl_handle, CURLOPT_HTTPGET, TRUE);
Что мне не хватает?
Дополнительная информация: У меня уже есть соединение, настроенное для выполнения запроса POST. Это завершается успешно, но позже, когда я пытаюсь повторно использовать соединение и переключиться обратно на GET с использованием указанных выше setopts, он все равно завершает внутреннюю проверку POST с неполными заголовками POST. Проблема в том, что он считает, что выполняет GET, но в итоге помещает заголовок POST без параметра content-length, и соединение завершается с ошибкой 411.
Решение 3
Решено: проблема лежит здесь:
Я установил POST
через _CUSTOMREQUEST
и _POST
, а _CUSTOMREQUEST
сохранился как POST код> в то время как
_POST
переключен на _HTTPGET
. Сервер предположил, что заголовок из _CUSTOMREQUEST
является правильным, и вернулся с 411.
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'POST');
Другие советы
Убедитесь, что вы помещаете строку запроса в конец вашего URL при выполнении запроса GET. Р>
$qry_str = "?x=10&y=20"; $ch = curl_init(); // Set query data here with the URL curl_setopt($ch, CURLOPT_URL, 'http://example.com/test.php' . $qry_str); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 3); $content = trim(curl_exec($ch)); curl_close($ch); print $content;
With a POST you pass the data via the CURLOPT_POSTFIELDS option instead of passing it in the CURLOPT__URL. ------------------------------------------------------------------------- $qry_str = "x=10&y=20"; curl_setopt($ch, CURLOPT_URL, 'http://example.com/test.php'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 3); // Set request method to POST curl_setopt($ch, CURLOPT_POST, 1); // Set query data here with CURLOPT_POSTFIELDS curl_setopt($ch, CURLOPT_POSTFIELDS, $qry_str); $content = trim(curl_exec($ch)); curl_close($ch); print $content;
Примечание из curl_setopt ()
документов для CURLOPT_HTTPGET
(выделение добавлено):
[Установите CURLOPT_HTTPGET равным]
TRUE
для сброса метода HTTP-запроса в GET.
Поскольку GET используется по умолчанию, это необходимо только в том случае, если метод запроса был изменен. Р>
Добавьте это перед вызовом curl_exec ($ curl_handle)
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'GET');
CURL-запрос по умолчанию - GET, вам не нужно устанавливать какие-либо параметры для создания GET CURL-запроса.