Как отправить необработанные данные POST с помощью cURL? (PHP)

Я пытаюсь отправить необработанные данные POST на страницу с использованием $ HTTP_RAW_POST_DATA , но мои попытки не удались, и было указано неопределенное уведомление индекса.

Я попытался сделать следующее:

curl_setopt($handle, CURLOPT_POSTFIELDS, 'Raw POST data'); // Doesn't seem to work at all. curl_setopt($handle, CURLOPT_POSTFIELDS, array('Raw POST data')); // 0 => Raw POST data 

Я провел некоторое исследование, и некоторые люди предложили отправить заголовок ( Content-Type: text / plain ) в запросе, который, похоже, не повлиял ни на что.

Если кто-то сможет предоставить решение по этой проблеме, я бы очень признателен. Спасибо!

Вы получаете ошибку в части ответа вашего цикла отправителя / получателя.

Хотя это может быть проблемой отправителя (который не отправляет правильный запрос), это может быть вызвано неправильной конфигурацией в PHP-скрипте приема . Разумеется, даже если запрос правильный, у получателя, тем не менее, нет HTTP_RAW_POST_DATA .

См .: http://www.php.net/manual/en/ini.core.php#ini.always-populate-raw-post-data

Всегда заполняйте $ HTTP_RAW_POST_DATA, содержащие необработанные данные POST. В противном случае переменная заполняется только с непризнанным типом данных MIME. Однако предпочтительным способом доступа к исходным данным POST является вход php: //. $ HTTP_RAW_POST_DATA недоступен с enctype = "multipart / form-data".

Итак, первое, что нужно проверить: действительно ли $HTTP_RAW_POST_DATA действительно заполнено, что из приведенной выше страницы требует:

  1. переменная .ini always_populate_raw_post_data имеет значение True,
  2. или POST отправляется с Content-Type который обработчик POST не распознает (возможно, можно использовать «text / raw»)

На этом этапе правильным способом отправки данных будет

 curl_setopt($handle, CURLOPT_POSTFIELDS, urlencode('Raw POST data')); 

Однако обратите внимание, что рекомендуемым способом получения этих данных было бы вовсе не полагаться на $HTTP_RAW_POST_DATA , а читать содержимое виртуального файла php://input .

php: // input – это поток только для чтения, который позволяет вам считывать необработанные данные из тела запроса. В случае запросов POST предпочтительнее использовать вход php: // вместо $HTTP_RAW_POST_DATA поскольку он не зависит от специальных директив php.ini. Более того, для тех случаев, когда по умолчанию HTTP_RAW_POST_DATA не заполняется по умолчанию, это потенциально менее энергоемкая альтернатива активации always_populate_raw_post_data.

По какой-то нечетной причине вышеупомянутая вещь заголовка, кажется, исправляет ее, ранее она не работала, я не уверен, почему она работает сейчас. Во всяком случае, для тех, кто не знает, что это код:

 curl_setopt($handle, CURLOPT_HTTPHEADER, array('Content-Type: text/plain'));