Як перейти з POST на GET у PHP CURL


83

Я намагався перейти від попереднього запиту на публікацію до запиту на отримання. Що передбачає його 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, використовуючи септопи над ним, він все одно закінчує робити POST внутрішньо з неповними заголовками POST. Проблема полягає в тому, що він вважає, що робить GET, але в кінцевому підсумку розміщує заголовок POST без параметра content-length, і з'єднання не вдається через 411 ERROR.


3
Будьте обережні з отриманням запитів. Google розважається з ними. ;)
— NotMe

10
@Chris - друг виявив це важким шляхом, коли він створив сайт, який керував вмістом, внесеним користувачами, за допомогою запитів GET. Googlebot із задоволенням перейшов за всіма посиланнями на "видалення" із передбачуваними результатами.
— Мередіт Л. Паттерсон

Відповіді:


109

Переконайтесь, що ви вводите рядок запиту в кінець 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);
$ вміст = обрізати (curl_exec ($ ch));
curl_close ($ ch);
роздрукувати вміст $;
За допомогою 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);

$ вміст = обрізати (curl_exec ($ ch));
curl_close ($ ch);
роздрукувати вміст $;

Примітка з curl_setopt()документів для CURLOPT_HTTPGET(курсив додано):

[Встановити CURLOPT_HTTPGET рівним], TRUEщоб скинути метод запиту HTTP до GET.
Оскільки за замовчуванням використовується GET, це потрібно лише в тому випадку, якщо метод запиту було змінено.


3
Це досить злий спосіб встановити тайм-аут у 51 секунду!
— Джек Гуссен,

Приємний улов @JackGoossen!
— RC.

55

Додайте це перед викликом curl_exec ($ curl_handle)

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

39

Вирішено: Проблема полягає тут:

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.