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可用。 encodeURI
和encodeURIComponent
。 在必须对查询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
任何东西。