Як перейти з 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.