使用node.js请求模块和特殊字符的Auth请求

时间:2014-12-03 15:42:51

标签: node.js encoding utf-8 request authorization

在授权密码中包含特殊字符的用户时遇到问题。我已经尝试了几种选择,而且我对它们中的任何一种都不是很满意。代码是这样的(全部是UTF-8):

var user = 'myuser';
var password = 'ºººººº';

var Iconv  = require('iconv').Iconv;
var iconv = new Iconv('latin1', 'utf-8');
//password = iconv.convert(password).toString();

var request = require('request');
var options = {
    uri: 'http://myhost/auth',
    auth: {
        user: user,
        pass: password
    }
};

request.get(options, function(err, resp, body) {
    if (err) {
        console.error('Error %j', err);
    } else if (resp.statusCode !== 200) {
        console.error('Error, status code %d', resp.statusCode);
    } else {
        console.log('Success!');
    }
});

console.log('Password length is %d bytes', Buffer.byteLength(password));

这是回归:

Password length is 12 bytes
Error, status code 401

当我取消注释编码转换(第5行)时,我得到:

Password length is 24 bytes
Success!

但我不明白为什么我需要转换为" latin1"当密码已经是UTF-8时,到" utf8"当我将整个文件转换为ISO-8859-15时,我得到(有和没有转换):

Password length is 18 bytes
Error, status code 401

Password length is 36 bytes
Error, status code 401

我也尝试过(结果相同):

request.get("http://" + user + ":" + password + "@myhost/auth", ...

var options = {
    uri: 'http://myhost/auth',
    auth: user' + ':' + password
};

但这可行(无转换):

var options = {
    url: 'http://myhost/auth',
    headers: {
        'Authorization': 'Basic ' + new Buffer(user + ':' + password).toString('base64')
    }
};

我想在没有来自" latin1"的丑陋转换的情况下进行授权。到" utf8"那缓冲区处理可能吗?

0 个答案:

没有答案