Intereting Posts
Найти в следующий раз бизнес открыт; расчет mysql часов Селен: Как утверждать, что определенный элемент присутствует в определенной ячейке определенной таблицы? Имена полей CodeIgniter ActiveRecord в инструкции JOIN Я хочу показать элементы формы на основе выбора пользователя Почему NSURLSession uploadTaskWithRequest: fromData: не удается загрузить на php-сервер? Проверка переменной сеанса в классе PHP Проверка подлинности формы CakePHP для обычных запросов с базовой аутентификацией для JSON Как лучше всего читать, а затем перезаписывать содержимое файла в php? Границы ячеек не печатаются (кроме 1-й страницы), когда таблица охватывает несколько страниц в Firefox domai name availbility checker Невозможно ли доступ к элементам в ассоциативных массивах PHP численно (то есть по индексу)? Форсирование диалога «Сохранить как» через jQuery GET Ошибка пароля Mysql в PHP Вставка нескольких значений с помощью mysqli MySQL получает строку (ы) между двумя # / несколькими парами #

POST для PHP из Node.js

Я пытаюсь POST некоторые данные из приложения Node.js в PHP-скрипт. Пока я просто строю доказательство концепции, но я не могу получить фактические данные на стороне PHP. Запрос проходит, и я получаю 200 обратно, но PHP считает, что массив $ _POST пуст.

Вот мой код узла:

// simple end point just for testing exports.testPost = function(request, response) { data = request.body.data; postToPHP(data); response.end(data); } function postToPHP (data) { var http = require('http'); var options = { host : 'localhost', port : 8050, path : '/machines/test/index.php', method : 'POST', headers : { 'Content-Type' : 'application/json', 'Content-Length' : Buffer.byteLength(data) } }; var buffer = ""; var reqPost = http.request(options, function(res) { console.log("statusCode: ", res.statusCode); res.on('data', function(d) { console.info('POST Result:\n'); //process.stdout.write(d); buffer = buffer+data; console.info('\n\nPOST completed'); }); res.on('end', function() { console.log(buffer); }); }); console.log("before write: "+data); reqPost.write(data); reqPost.end(); } 

Опять же, запрос делает его на localhost: 8050 / machines / test / index.php, но когда я делаю var_dump из $ _POST, это пустой массив.

 [29-Jan-2014 21:12:44] array(0) { } 

Я подозреваю, что что-то не так с методом .write (), но я не могу понять, что. Был бы признателен за любой вклад в то, что я пропускаю или делаю неправильно.

* Обновление:

Поскольку некоторые из комментариев указывают на использование file_get_contents ('php: // input'); действительно работает, чтобы получить данные на стороне PHP, но я все же предпочел бы иметь возможность напрямую обращаться к массиву $ _POST.

Поскольку вы отправляете данные с помощью Content-Type: application/json вам нужно будет прочитать исходный ввод, поскольку php не знает, как читать json в их глобальные переменные, такие как _GET и _POST, если у вас нет расширения php, которое это делает.

Вы можете использовать библиотеку querystring для синтаксического анализа объекта в строку запроса пары имен и значений, которую вы могли бы передать с помощью Content-Type:application/x-www-form-urlencoded чтобы данные анализировались в глобальные переменные

 var data = { var1:"something", var2:"something else" }; var querystring = require("querystring"); var qs = querystring.stringify(data); var qslength = qs.length; var options = { hostname: "example.com", port: 80, path: "some.php", method: 'POST', headers:{ 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': qslength } }; var buffer = ""; var req = http.request(options, function(res) { res.on('data', function (chunk) { buffer+=chunk; }); res.on('end', function() { console.log(buffer); }); }); req.write(qs); req.end(); - var data = { var1:"something", var2:"something else" }; var querystring = require("querystring"); var qs = querystring.stringify(data); var qslength = qs.length; var options = { hostname: "example.com", port: 80, path: "some.php", method: 'POST', headers:{ 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': qslength } }; var buffer = ""; var req = http.request(options, function(res) { res.on('data', function (chunk) { buffer+=chunk; }); res.on('end', function() { console.log(buffer); }); }); req.write(qs); req.end();