2013-09-29 6 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がすべて壊れてしまいます。コンソールで私はこのURLを使用してhttp:

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

を送信する方法を参照してください。または、私はちょうどURLのスペースを使用することはできません?

+5

URLエンコードを行う必要があります。 – thefourtheye

+0

@thefourtheeye:読んだ例やリンクはありますか? –

+2

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponentおよび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) 

注に変更する必要があります。利用可能な2つの機能があります

encodeURIおよびencodeURIComponent。この場合のように、URL全体をエンコードする必要がある場合はencodeURIを、クエリ文字列パラメータをエンコードする必要がある場合はencodeURIComponentを使用する必要があります。詳しい説明はthis answerをご覧ください。

+0

ネクロマンサーここ... この回答は無効です、encodeURIComponentはウィンドウプロパティなので、ブラウザでのみ利用でき、Node.jsでは使用できません(タイトルを参照)。 –

+0

@JulienCROUZET実際には、 'encodeURIComponent'もNode.jsで利用できます。これはv8で提供されています。 [this](http://ideone.com/q2Ddjp)をチェックしてください。 – thefourtheye

+0

これはECMAで定義されていますが、Node.js docには存在しないため、LTSやその他の保証はありません。 /公式/ウェイはクエリ文字列モジュールです –

0

最良の方法は、ネイティブモジュールQueryString使用することです。これは、ネイティブモジュールであるので、あなたはnpm install何もする必要はありません

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

を。

7

質問はNode.jsですencodeURIcomponentはNode.jsで定義されていません。代わりにquerystring.escape()メソッドを使用してください。

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