CURLOPT_POST и CURLOPT_POSTFIELDS: требуется ли опция CURLOPT_POST?

Я новичок в завивать в PHP. У меня есть вопрос относительно использования параметров curl.

Рассмотрим два файла сценария: test1.php и test2.php, которые присутствуют в корневом www. я использую Ubuntu 12.04 LTS. Версия libcurl для PHP 7.22.0.

Содержание test1.php

<?php
$ch = curl_init();
$post_data = array(
'firstname' => 'John',
'lastname' => 'Doe'
);
curl_setopt($ch, CURLOPT_URL, 'localhost/test2.php');
curl_setopt($ch, CURLOPT_POST, TRUE);   //is it optional?
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_exec($ch);
curl_close($ch);
?>

Содержание test2.php

<?php
var_dump($_POST);
?>

Когда я запускаю test1.php через браузер, я вижу опубликованные результаты. Теперь, если я уберу опцию curl, содержащую CURLOPT_POST, пример все еще работает. Даже если я поставлю CURLOPT_POST в false, сообщение выполняется и результат отображается. Итак, это CURLOPT_POST не требуется вообще? Похоже вариант CURLOPT_POSTFIELDS заботится об отправке данных через СООБЩЕНИЕ без использования CURLOPT_POST вариант. Когда я печатаю $_SERVER в test2.php метод запроса всегда имеет значение POST (с опцией или без CURLOPT_POST).

Может ли кто-нибудь, пожалуйста, дайте мне знать точное использование CURLOPT_POST вариант? Это необходимо для отправки данных через POST?

17

Решение

Ты прав. CURLOPT_POSTFIELDS подразумевает CURLOPT_POST. Вам не нужно использовать CURLOPT_POST при использовании CURLOPT_POSTFIELDS. В этом случае метод запроса всегда будет установлен на POST.

Обратите внимание, что это в вашем случае, если вы хотите, чтобы это было СООБЩЕНИЕ запрос.

Если ты не хочешь быть этим СООБЩЕНИЕ запрос но установить CURLOPT_POSTFIELDS, пожалуйста, смотрите этот связанный Q&A:

22

Другие решения

Для дальнейшего использования в документе API скажите это о CURLOPT_POST


Резюме:

Истинный параметр указывает библиотеке делать обычную запись HTTP. Это также заставит библиотеку использовать заголовок «Content-Type: application / x-www-form-urlencoded». (Это наиболее распространенный метод POST).

Используйте опцию CURLOPT_POSTFIELDS, чтобы указать, какие данные следует публиковать, и CURLOPT_POSTFIELDSIZE, чтобы задать размер данных. При желании вы можете предоставить данные для POST, используя параметры CURLOPT_READFUNCTION и CURLOPT_READDATA.

Вы можете переопределить заголовок POST Content-Type: по умолчанию, установив свой собственный с помощью CURLOPT_HTTPHEADER.

Использование POST с HTTP 1.1 подразумевает использование заголовка «Expect: 100-continue». Вы можете отключить этот заголовок с помощью CURLOPT_HTTPHEADER как обычно.

Если вы используете POST на сервере HTTP 1.1, вы можете отправлять данные, не зная размера, перед запуском POST, если вы используете чанкованное кодирование. Вы включаете это, добавляя заголовок, такой как «Transfer-Encoding: chunked» с помощью CURLOPT_HTTPHEADER. С HTTP 1.0 или без частичной передачи вы должны указать размер в запросе.

если вы отправили запрос POST и хотите вместо него создать HEAD или GET, вы должны явно выбрать новый тип запроса, используя CURLOPT_NOBODY или CURLOPT_HTTPGET или аналогичный.


Прямо сейчас я проверяю, будет ли установка CURLOPT_POST переопределять мой параметр CURLOPT_HTTPHEADER, «Content-Type: application / json; charset = utf-8».

0

По вопросам рекламы [email protected]