HTTP帖子标题不正确

时间:2015-10-10 15:15:00

标签: javascript node.js http post httprequest

我正在使用node.js将HTTP POST发送到APP服务器。 POST主体中的电子邮件地址joe@gmail.com在APP服务器端显示为joe%40gmail.com。我在下面的代码中使用了Content-Type text / plain,但是根据服务器日志,application / x-www-form-urlencoded实际上是在POST请求头中。

我之前的帖子在Chrome邮递员结果上有误。请忽略它,抱歉混淆。

我是新手,可能在这里错过了一些明显的东西。任何帮助表示赞赏。

以下是代码:

var express = require("express");
var app = module.exports = express();
var request = require('request');
var config = require('../config'); 
app.post('/', function(req, res) {

    var username = req.body.name;
    var password = req.body.passwd;
    var email = req.body.email;
    console.log("email=", email);

    // connect to APP server
    var url = config.appServer;

    request( {
        uri: url,
        method: "POST",
        timeout: 10000, // 10 sec
        headers: {
            'Content-Type': 'text/plain'
        },
        form: {
            act: 'create',
            username : username,
            passwd: password,
            email: email
        }
        }, function (error, response, body) {
            // handle return here

1 个答案:

答案 0 :(得分:0)

这是完全正常的行为。在content-type使用form选项时,您也无需设置request标题。

这是一个简短的例子:

request({
  uri: 'http://requestb.in/1g2xzno1',
  method: 'POST',
  timeout: 10000, // 10 sec
  form: {
    act: 'create',
    username : 'username',
    passwd: 'password',
    email: 'joe@gmail.com'
  }
  }, function (err, res, body) {
    if (err) console.log(err)
    console.log(body)
  })

您可以看到该请求的结果here。这是您的应用服务器收到的内容。然后,您需要做的就是解析您的应用服务器上的请求正文(它是RAW BODY标题下面的字符串):

var qs = require('qs')
qs.parse('act=create&username=username&passwd=password&email=joe%40gmail.com')

{ act: 'create',
  username: 'username',
  passwd: 'password',
  email: 'joe@gmail.com' }

或者,如果您在应用服务器上使用Express,则可以使用body-parser中间件来为您执行相同操作:

app.use(bodyParser.urlencoded({extended: true}))