Node.js中的URL组件编码

我想用node.js发送http请求。 我做:

http = require('http'); var options = { host: 'www.mainsms.ru', path: '/api/mainsms/message/send?project='+project+'&sender='+sender+'&message='+message+'&recipients='+from+'&sign='+sign }; http.get(options, function(res) { console.log('STATUS: ' + res.statusCode); console.log('HEADERS: ' + JSON.stringify(res.headers)); }).on('error', function(e) { console.log('ERROR: ' + e.message); }); 

当我的path是这样的:

 /api/mainsms/message/send?project=geoMessage&sender=gis&message=tester_response&recipients=79089145***&sign=2c4135e0f84d2c535846db17b1cec3c6 

是工作。 但是当message参数包含任何空格时,例如tester response全部中断 并在控制台中,我看到,http使用此url:

  /api/mainsms/message/send?project=geoMessage&sender=gis&message=tester 

如何发送空格。 或者我只是不能在URL中使用空格?

你正在寻找的是所谓的URL分量编码 。

 path: '/api/mainsms/message/send?project=' + project + '&sender=' + sender + '&message=' + message + '&recipients=' + from + '&sign=' + sign 

必须改成

 path: '/api/mainsms/message/send?project=' + encodeURIComponent(project) + '&sender=' + encodeURIComponent(sender) + '&message=' + encodeURIComponent(message) + '&recipients='+encodeURIComponent(from) + '&sign=' + encodeURIComponent(sign) 

注意:

有两个function可用。 encodeURIencodeURIComponent 。 在必须对查询string参数进行编码时,如果必须对整个URL和encodeURIComponent进行编码,则需要使用encodeURI ,就像在这种情况下一样。 请阅读这个答案广泛的解释。

问题是Node.js。 encodeURIcomponent没有在Node.js中定义 改用querystring.escape()方法。

 var qs = require('querystring'); qs.escape(stringToBeEscaped); 

最好的方法是使用本地模块QueryString :

 var qs = require('querystring'); console.log(qs.escape('Hello $ é " \' & =')); // 'Hello%20%24%20%C3%A9%20%22%20\'%20%26%20%3D' 

这是一个本地模块,所以你不必npm install任何东西。

Interesting Posts