包含ascii字符的POST请求[x-www-form-urlencoded]

时间:2015-02-11 11:00:50

标签: node.js post request

我已经阅读了很多问题,但没有一个能解决我的问题。

我正在尝试提交一个表单,其中页面的字符集是ISO-8859-1。我正在使用github.com/request/request

从文档中提交表单我们基本上需要:

request.post({url:'http://service.com/upload', form: {key:'value'}}, function(err,httpResponse,body){ /* ... */ })

我试了但是ascii字符不对。 该页面不接受我发送的内容:

var options = { 
  url: formData.action,
  encoding: 'ascii',
  form: { username: 'teste', password: '23dçkasã' }
}

request.post(options, function...)

我也试着:

var options = { 
  url: formData.action,
  headers: { 
    'Content-Type': 'application/x-www-form-urlencoded; charset=iso-8859-1'
  },
  form: { username: 'teste', password: '23dçkasã' }
}

request.post(options, function...)

修改

我还尝试使用charset=Windows-1252和Iconv:var iconv = new Iconv('UTF-8', 'ISO-8859-1');

1 个答案:

答案 0 :(得分:0)

问题出在查询字符串上:

  

我用于测试的密码是djaçf3,POST请求的查询字符串是dja%C3%A7f3,但ISO-8859-1的密码应该是dja%E7f3

所以我使用Node中的querystring.stringify(obj[, sep][, eq][, options]),最终结果是:

var options = { 
  url: formData.action,
  form: querystring.stringify({ username: 'xpto', password: 'djaçf3' }, null, null, { encodeURIComponent: escape })
}

request.post(options, function...)
  

Options对象可能包含encodeURIComponent属性(默认情况下为querystring.escape),如果需要,它可用于对非utf8编码的字符串进行编码。