2013-09-29 33 views
12

我想使用node.js發送http請求。我做的:Node.js中的URL分量編碼

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使用此網址:

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

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

+5

您需要進行網址編碼。 – thefourtheye

+0

@thefourtheeye:你可以給任何例子或鏈接閱讀? –

+2

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent and http://nodejs.org/api/querystring.html – thefourtheye

回答

29

你在找什麼叫做URL component encoding

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) 

注:

有兩種可用的功能。 encodeURIencodeURIComponent。如果必須對查詢字符串參數進行編碼,則必須在編碼整個URL時使用encodeURI,並且在此情況下需要使用encodeURIComponent。請閱讀this answer進行詳細解釋。

+0

Necromancer here ... 此答案無效,encodeURIComponent是一個窗口屬性,所以它只能在瀏覽器中使用,而不能在Node.js中使用(參見標題)。 –

+0

@JulienCROUZET其實'encodeURIComponent'也可以在Node.js中使用。它由v8提供。請檢查[this](http://ideone.com/q2Ddjp)。 – thefourtheye

+0

它/可能/可用,它在ECMA中定義,但在Node.js文檔中沒有存在,因此沒有LTS或其他保證。 /官方/方式是查詢字符串模塊 –

0

的最好方法是使用本地模塊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什麼。

7

問題是針對Node.js. Node.js中沒有定義encodeURIcomponent。改爲使用querystring.escape()方法。

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