使用node http模块和request模块请求无响应

使用node http模块和request模块请求无响应


node环境

  • node版本:0.10.34

问题描述:

给app应用接第三方登陆付费SDK时,登陆验证的时候使用post请求,请求无响应,无报错,回调接口没有调用。但是对方接收到了请求,也成功返回了数据。

注:仅仅请求该渠道接口才会无响应,其他渠道均正常。

请求代码如下:

var http=require('http');
var querystring=require('querystring');
//发送 http Post 请求
var postData = querystring.stringify({"user_id":"54",
    "token":"29005b674967f413ebf20e5686e4d147"
});
var options = {
    hostname:'youle.maiugame.com',
    port:80,
    path:'/sdk.php/LoginNotify/login_verify',
    method:'POST',
    headers:{
        'Content-Type':'application/json; charset=UTF-8',
        "Connection":"keep-alive"
    }
};
try{
    var req = http.request(options, function(res) {
        //此处未打印,没有执行该回调
        console.log('Status:',res.statusCode);
        console.log('headers:',JSON.stringify(res.headers));
        res.setEncoding('utf-8');
        res.on('data',function(chun){
            console.log('body分隔线---------------------------------\r\n');
            console.info(chun);
        });
        res.on('end',function(){
            console.log('No more data in response.********');
        });
    });
    req.on('error',function(err){
        console.error(err);
    });
    req.write(postData);
    req.end();
}catch(err) {
    console.error('发生异常:',err);
}

问题查找

尝试使用curl、浏览器访问、postman请求均有相应,SDK方使用以上代码请求也有响应,发现仅仅使用我们的服务器无响应,最后使用不同的node版本跑以上代码,发现跟node版本可能有关系。node版本0.10.的旧版本均无响应,node 6.0 及 8.0 的版本均请求正常。所以初步觉得跟node版本有关(ps:但是0.10.~版本的node 请求别的接口都是正常的啊,唯独这个不行,是不是跟SDK方的代码有关系啊~ 哎,不知道,不明了)

问题解决

之前尝试各种改代码,各种测试,搞了一天半,真心是心力交瘁,找bug不可怕,重要的是解决没有bug的bug。。。

正好这两天,带我的大佬回家准本结婚,都心灰意冷打算等大佬回来解决的,突然灵机一动,直接在代码里使用curl 命令请求试试,一试果然成功啦!!!泪流满面中。。。
早点这样就好了,虽然并不知道这是不是个好的解决方法,但是也算是解了我的燃眉之急啊~~~所谓能够解决问题的方法就是好方法

最终解决问题的代码

var exec = require('child_process').exec;
var comStr = 'curl -l -H "Content-type: application/json" -X POST -d ' + '\'' +JSON.stringify({"token":"29005b674967f413ebf20e5686e4d147","user_id":"54"}) +'\' '+ 'http://youle.maiugame.com/sdk.php/LoginNotify/login_verify';
console.error(cmdStr);
exec(comStr, function(err,stdout,stderr){
    if(err) {
        console.log('登陆验证失败:',err);
    } else {
        var data = JSON.parse(stdout);
        console.log(data);
    }
});

工作中经常遇到解决不了的问题,都没有记录下来,这是第一篇,以后多记录总结。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值