Как переключиться с 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.

Author: gnosio, 2009-08-04

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

 93
Author: RC., 2017-05-18 12:13:09

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

curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'GET');
 44
Author: Bao Le, 2012-05-04 06:20:54

Решено: Проблема заключается здесь:

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

curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'POST');
 30
Author: gnosio, 2013-10-24 12:12:55

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

 2
Author: Albertino Carvalho, 2017-01-17 00:36:47