Как переключиться с POST, чтобы войти в 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, но в итоге помещает заголовок сообщения без параметра content-length, и соединение завершается ошибкой 411.
4 answers
Убедитесь, что вы помещаете строку запроса в конец своего 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 используется по умолчанию, это необходимо только в том случае, если метод запроса был изменен.
Добавьте это перед вызовом curl_exec($curl_handle)
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'GET');
Решено: Проблема заключается здесь:
Я установил POST
как через _CUSTOMREQUEST
, так и через _POST
, и _CUSTOMREQUEST
сохранялся как POST
, в то время как _POST
переключился на _HTTPGET
. Сервер предположил, что заголовок из _CUSTOMREQUEST
является правильным, и вернулся с 411.
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'POST');
Запрос CURL по умолчанию - GET, вам не нужно устанавливать какие-либо параметры, чтобы сделать запрос GET CURL.