2012-03-25 7 views
4

httpヘッダーの最初の行を解析するためのjavascript関数はありますか?httpヘッダーの最初の行を解析する方法は?

GET /page/?id=173&sessid=mk9sa774 HTTP/1.1 

URLがエンコードされています。私は、オブジェクトを取得したいと思い

は、次のように:

{ 
"method" : "GET", 
"url" : "/page/", 
"parameters": { 
    "id" : 173, 
    "sessid" : "mk9sa774" 
    } 
} 

私は多くのことを探索したが、私は便利なものを発見していません。

var lineParts = line.split(' '); 

は今、あなたが得ることができる方法、解析対象外パス、およびバージョン:

var method = lineParts[0]; 
var path = lineParts[1]; 
var version = lineParts[2]; 

を次にあなたがスペースに分割することができます

+0

どのような環境でですか?ブラウザ? –

+0

はい、javascript –

+1

JavaScript文字列としてラインがありますか? – boisvert

答えて

6

まず事前に

おかげで、パスをクエリ文字列と非クエリ文字列部分に分割できます。

var queryStringIndex = path.indexOf('?'); 
var url, queryString; 
if(queryStringIndex == -1) { 
    url = path, queryString = ''; 
}else{ 
    url = path.substring(0, queryStringIndex); 
    // I believe that technically the query string includes the '?', 
    // but that's not important for us. 
    queryString = path.substring(queryStringIndex + 1); 
} 

クエリ文字列があれば、私たちはその後、key=value文字列にそれを分割することができます。そして、私たちはそれらをエスケープ解除し、オブジェクトにそれらを詰め込むことができ

var queryStringParts = []; 
if(queryStringIndex != -1) { 
    queryStringParts = queryString.split('&'); 
} 

var parameters = {}; 
queryStringParts.forEach(function(part) { 
    var equalsIndex = part.indexOf('='); 
    var key, value; 
    if(equalsIndex == -1) { 
     key = part, value = ""; 
    }else{ 
     key = part.substring(0, equalsIndex); 
     value = part.substring(equalsIndex + 1); 
    } 
    key = decodeURIComponent(key); 
    value = decodeURIComponent(value); 
    parameters[key] = value; 
}); 

あなたの場合本当にそうしたいと思ったら、すべてのデータをオブジェクトに入れることができます:

return { 
    method:  method, 
    url:  url, 
    version: version, 
    parameters: parameters 
}; 

ブラウザ環境にいる場合は、これが唯一の方法です。 Node.JSを使用している場合はit can deal with the URL parsing for youです。

関連する問題