我正在尝试从Node.js应用程序将一些数据POST到
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,但是当我做一个$_POST的var_dump它是一个空数组.
[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();