NodeJS:获取ISO-8859-1编码的url端点

时间:2014-09-25 15:28:48

标签: javascript .net node.js http encoding

我正在尝试使用request和iconv-lite在Node.js中实现此(.net)示例(它需要URL请求的HTTP Web服务在ISO-8859-1中编码):

WebClient wc = new WebClient();
var encoding = Encoding.GetEncoding("iso-8859-1");
var url = new StringBuilder();
url.Append("https://url.com?");
url.Append("&param=" + HttpUtility.UrlEncode(foo, encoding));
wc.Encoding = encoding;
return wc.DownloadString(url.ToString());

问题在于对URL进行编码(不起作用)。我正在尝试执行相同的GET请求,其中URL必须编码为ISO-8859-1。但是,做这样的事情:

var options = {
    url : iconv.encode(url, 'ISO-8859-1').toString(),
    method: 'get',
    headers : {
        'Content-Type': 'application/x-www-form-urlencoded; charset=ISO-8859-1'
    }
};

request(options, function (error, response, body) {

    if (!error && response.statusCode == 200) {
        console.log(body);
    }else {
        console.log('err: ' + error);
    }
});

它仍未作为ISO-8859-1字符串发送。关于如何使用.NET例子的任何线索?

1 个答案:

答案 0 :(得分:0)

我认为它解码响应,而不是编码网址。试试这个:

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

// ...

var url = 'https://url.com/?' + qs.stringify({ param: 'foo' });

https.get(url, function(res) {
  if (res.statusCode === 200) {
    var bufs = [], bufsize = 0;
    res.on('data', function(data) {
      bufs.push(data);
      bufsize += data.length;
    }).on('end', function() {
      var buffer = Buffer.concat(bufs, bufsize),
          body = iconv.decode(buffer, 'iso-8859-1');
      console.log('Body: ' + body);
    });
    return;
  } else
    console.log('Non-OK status code: ' + res.statusCode);
  res.resume();
});