当前位置: 首页 > 面试题库 >

从Node.js POST到PHP

弓明亮
2023-03-14
问题内容

我正在尝试将一些数据从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扩展来做到这一点。

您可以使用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();


 类似资料:
  • 问题内容: 在PHP中,将RGB三元组转换为HSV值的最直接方法是什么? 问题答案:

  • 问题内容: 我已经使用C#,更广泛地使用.Net框架已有两年了。我经常听说C#和Java语言之间的相似之处,并且想了解有关第二种语言的更多信息。 来自C#时,您对学习Java有任何具体建议吗? C#程序员在启动Java时会发生任何常见错误吗? 是否有任何文档显示了您可以保留的习惯和必须改变的习惯(仍然在C#到Java的可视性中,所以比C#与Java的比较要具体一些) 问题答案: 好吧,尽管C#和J

  • 问题内容: 我有这个InputStream: 如何将其转换为ServletInputStream? 我努力了: 但不起作用。 编辑: 我的方法是这样的: 我正在尝试将所有请求都转换为小写。 问题答案: 试试这个代码。

  • 我使用JavaFX2.2制作了一个应用程序,希望切换到JavaFX8。使用JavaFX2.2,我的应用程序如下所示: 在使用JavaFX8而不更改任何源代码时,如下所示: 在JavaFX8中,一些节点根本不显示(例如,条件1),有时在随机单击ScrollPane后出现。此外,节点的大小不正确(比较步骤1和小点)。另一个问题是,当执行添加节点等操作时,应用程序在JavaFX8中严重滞后。 null

  • 此代码已被删除,因为它可以受版权保护,没有任何权限不允许这样做

  • ScrollView 简单运用 ScrollView 是一个通用的可滚动容器,你可以在其中放入多个组件,而且这些组件并不粗要是同类型的。ScrollView 不仅可以垂直滚动,还可以水平滚动(通过 horizontal 属性来设置)。 export default class HelloWorld extends Component { render() { return (