Вопрос

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

Это было полезно?

Решение 3

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

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

curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'POST');

Другие советы

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

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

curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'GET');

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top