Как перейти с POST на GET в PHP CURL - PullRequest
79 голосов
/ 04 августа 2009

Я попытался переключиться с предыдущего запроса 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. ERROR.

Ответы [ 4 ]

103 голосов
/ 04 августа 2009

Убедитесь, что вы помещаете строку запроса в конец вашего 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 используется по умолчанию, это необходимо только в том случае, если метод запроса был изменен.

50 голосов
/ 04 мая 2012

Добавьте это перед вызовом curl_exec ($ curl_handle)

curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'GET');
33 голосов
/ 04 августа 2009

решено: проблема лежит здесь:

Я установил POST через _CUSTOMREQUEST и _POST, а _CUSTOMREQUEST сохранился как POST, а _POST переключился на _HTTPGET. Сервер принял правильный заголовок от _CUSTOMREQUEST и вернулся с 411.

curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'POST');
2 голосов
/ 17 января 2017

CURL-запрос по умолчанию - GET, вам не нужно устанавливать какие-либо опции для создания GET CURL-запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...