it-swarm.com.ru

Как перейти с POST на GET в 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, используя вышеуказанные setopts, он все равно завершает выполнение внутренне POST с неполными заголовками POST. Проблема в том, что он считает, что выполняет GET, но в итоге помещает заголовок POST без параметра content-length, и соединение завершается с ошибкой 411 ERROR.

79
gnosio

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

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

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

Убедитесь, что вы помещаете строку запроса в конец вашего URL при выполнении запроса GET.

 $ qry_str = "? x = 10 & y = 20"; 
 $ ch = curl_init (); 
 
 // Установить здесь данные запроса с помощью 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; 
 Используя POST, вы передаете данные с помощью опции CURLOPT_POSTFIELDS вместо 
 Передачи их в 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); 
 
 // Установить метод запроса на POST 
 curl_setopt ($ ch, CURLOPT_POST, 1); 
 
 // Установить здесь данные запроса с помощью 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 для сброса метода HTTP-запроса в GET.
Поскольку GET является значением по умолчанию, это необходимо, только если был изменен метод запроса.

104
RC.

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

curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'GET');
50
Bao Le

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

2
Albertino Carvalho