Я попытался переключиться с предыдущего запроса на отправку запроса 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.
Убедитесь, что вы отправляете строку запроса в конце 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 ($ ч); 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 ($ ч); print $ content;
Примечание из документов curl_setopt()
для CURLOPT_HTTPGET
(выделено мной):
[Установите CURLOPT_HTTPGET равным]
TRUE
чтобы сбросить метод HTTP-запроса в GET.
Поскольку GET является значением по умолчанию, это необходимо только в том случае, если метод запроса был изменен.
Добавьте это перед вызовом curl_exec ($ curl_handle)
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'GET');
Решенный: Проблема здесь:
Я устанавливал POST
через _CUSTOMREQUEST
и _POST
а _CUSTOMREQUEST
сохранялся как POST
а _POST
переключался на _HTTPGET
. Сервер принял заголовок от _CUSTOMREQUEST
чтобы быть правильным и вернулся с 411.
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'POST');
Запрос CURL по умолчанию – GET, вам не нужно устанавливать какие-либо опции для запроса GET CURL.
Вот довольно приличный пример разницы: