Я пытаюсь отправить необработанные данные 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
действительно заполнено, что из приведенной выше страницы требует:
always_populate_raw_post_data
имеет значение True, 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'));