Как переключиться с POST на GET в PHP CURL
Я попытался переключиться с предыдущего запроса на запрос запроса Get. Что предполагает его 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 без параметра длины контента, а соединение терпит неудачу с 411 ERROR.
Ответы
Ответ 1
Решено: проблема здесь:
Я установил POST
через _CUSTOMREQUEST
и _POST
, а _CUSTOMREQUEST
сохранялся как POST
, а _POST
- на _HTTPGET
. Сервер предположил, что заголовок из _CUSTOMREQUEST
был правильным и вернулся с 411.
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'POST');
Ответ 2
Убедитесь, что вы отправляете строку запроса в конце 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()
docs для CURLOPT_HTTPGET
(выделено мной):
[Установите CURLOPT_HTTPGET равным] TRUE
в reset метод HTTP-запроса для GET.
Поскольку GET является значением по умолчанию, это необходимо только в том случае, если метод запроса был изменен.
Ответ 3
Добавьте это перед вызовом curl_exec ($ curl_handle)
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'GET');
Ответ 4
Запрос CURL по умолчанию - GET, вам не нужно устанавливать какие-либо параметры для запроса GET CURL.
Ответ 5
Вот довольно приличный пример разницы:
http://www.weberdev.com/get_example-4606.html