首页 > Nodejs发送POST请求

Nodejs发送POST请求

我想用nodejs,通过微信官方的api,来生成某个微信公众平台的二维码。

调用官方api的时候,有一步需要用post发送请求,于是上网查了些资料,发现一般发送post请求的做法是(下面是简化版代码):

var querystring = require('querystring');
var https = require('https');

var post_data = querystring.stringify({
    "name":"BOb",
    "age":30,
    "job":"teacher"
});


var post_req = https.request(post_opt,function(res){
    //some code here
});
post_req.write(post_data);
post_req.end();

然而官方api要求发送的数据是这样的:

{
    "action_name": "QR_LIMIT_SCENE",
    "action_info": {
        "scene": {
            "scene_id": 1000
        }
    }
}

也就是说,调用了querystring.stringify方法之后,变成了action_name=QR_LIMIT_SCENE&action_info=

也因为所给的信息不够,所以官方api会返回报错信息:{"errcode":40052,"errmsg":"invalid action name hint: [WGvPfa0936vr21]"},上网查了一下,这个信息说的是发送的post数据,官方api认不出来(认出来才有鬼了,这个信息只有半截的)

对了,取二维码的参考文章:微信公众平台教程之生成带参数二维码

所以我想问,nodejs里,要发送多层object(就是一个object里套着另一个object)的数据的post请求,应该怎么写?

附上小弟代码如不嫌弃可以读一下。。

var https = require('https');
var util = require('util');
var url = require('url');
var querystring = require('querystring');


var ACCESS_TOKEN = "accesstoken就不写出来了";
var urlGetTicket = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token="+ACCESS_TOKEN;

var post_option = url.parse(urlGetTicket);
post_option.method = "POST";
post_option.port = 443;
var post_data = querystring.stringify({
    'action_name': 'QR_LIMIT_SCENE',
    'action_info': {
        'scene': {
            'scene_id': 01
        }
    }
});
post_option.headers = {
    'Content-Type' : 'application/x-www-form-urlencoded',
    'Content-Length' : post_data.length
};
var post_req = https.request(post_option,function(res){
    res.setEncoding('utf8');
    res.on('data',function(chunk){
        console.log(chunk);
    });
});
post_req.write(post_data);
post_req.end();

var server = https.createServer(function(){}).listen('8080');

你可以试试request这个库


  1. querystring.stringify 改为 JSON.stringify

  2. 'Content-Type' : 'application/x-www-form-urlencoded', 改为 'Content-Type' : 'application/json',.

因为没有申请过, 所以没有 token 没办法试, 如果按上面的改了, 不成功, 请继续反馈, 出错信息.

【热门文章】
【热门文章】