我正在尝试将一些数据从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,但是当我执行$ _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扩展来做到这一点。
Content-Type: application/json
您可以使用querystring库将对象解析为名称- 值对查询字符串,Content-Type:application/x-www-form-urlencoded然后与之进行传输,以便将数据解析为全局变量
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();