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

NodeJS: fetching ISO-8859-1-encoded url endpoints

本文关键字:url 端点 编码 ISO-8859-1 获取 NodeJS      更新时间:2023-09-26

我正试图在Node.js中使用request和iconv-lite(它是一个需要url请求的HTTP web服务,在ISO-8859-1中编码)来实现这个(.net)示例:

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示例一样工作,有什么线索吗?

我认为这是在解码响应,而不是编码url。试试这个:

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();
});