zoukankan      html  css  js  c++  java
  • node.js传参给PHP失败,headers加上'Content-Length': Buffer.byteLength(content)

    node.js需要传参给PHP,执行计划任务

    var events = require('events'); 
    
    start_cron("gc","www.y.com",80,"/cron.php",30000,{"auth":"7wElqW6vG2FcjnhomEckLg1W2t6uP5ZE0VlwjRrinrFmS3MODuvVFvhAGWeCwNRp"}); 
    
    function start_cron(name,host,port,url,timespan,postdata)
    {    
        var emitter = new events.EventEmitter(); 
        var cronInterval = null;
        
        emitter.on(name, function() {     
            clearInterval(cronInterval);
            var http = require('http');
            var qs = require('querystring');  
            var content = qs.stringify(postdata); 
            
            var options = {
                hostname: host,
                data:postdata,
                port: port,
                path: url,
                method: 'POST',
                headers: {  
                    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
                }
            };
            var req = http.request(options, function (res) {
                cronInterval = setInterval(function() { 
                        emitter.emit(name); 
                }, timespan);
                //console.log('STATUS: ' + res.statusCode);
                //console.log('HEADERS: ' + JSON.stringify(res.headers));
                res.setEncoding('utf8');
                res.on('data', function (chunk) {                
                    console.log('BODY: ' + chunk);
                });
            });
            req.on('error', function (e) {
                cronInterval = setInterval(function() { 
                    emitter.emit(name); 
                }, timespan);
                console.log('problem with request: ' + e.message);
            });
            
            req.write(content); 
            req.end();        
        });
        
        cronInterval = setInterval(function() { 
            emitter.emit(name); 
        }, timespan);
    
    }

    PHP接收不到auth值。。

    $auth = trim($_POST['auth']);

    解决方案在headers中加入'Content-Length': Buffer.byteLength(content)

    解释:Buffer.byteLength(字符串,编码方式)计算指定字符串的字节数

    Buffer.byteLength(string[, encoding])

    • string {String} | {Buffer} | {TypedArray} | {DataView} | {ArrayBuffer}
    • encoding {String} 默认:'utf8'
    • 返回:{Number}

    当 string 是一个 Buffer / DataView / TypedArray / ArrayBuffer 时,返回实际的字节长度。

    除此之外,将转换为 String 并返回字符串的字节长度。

    有时候不加这个会没法解析数据

    headers: {  
                    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',  
                    'Content-Length': Buffer.byteLength(content)
                }
  • 相关阅读:
    Array的 map() 和 reduce()
    欧几里得算法求解最大公约数
    JavaScript Function
    JavaScript Hoisting(提升)
    activemq的事务消息
    Spring整合Activemq
    10张图带你深入理解Docker容器和镜像
    Thread类的interrupt方法
    简单工厂、工厂方法、抽象工厂笔记
    设计模式之观察者模式
  • 原文地址:https://www.cnblogs.com/hiit/p/11918208.html
Copyright © 2011-2022 走看看