Подтвердить что ты не робот

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

4b9b3361

Ответ 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.