2016-05-04 13 views
0

私はSet-Cookieヘッダーから複数のCookieを解析しようとしていますが、Web上で解決策を探してみましたが、私は幸運でした。Set-Cookieヘッダーから複数のCookieを解析するにはどうすればよいですか?

これは、解析しようとしているヘッダー文字列です。

blacklisted_tags=; path=/,,locale=en; path=/,,login=UserName; path=/; expires=Thu, 04-May-2017 22:35:39 GMT,,pass_hash=06xdbf50dfddb67f04352673g85o2645d7399xv; path=/; expires=Thu, 04-May-2017 22:35:39 GMT,_session=BAh7CDoMdXNlcl9pZGkDgGMBOg9hi4X9W9uX2lkIiVhNTBmOWYxMWZmYWY4ZjE4MTc3NWUxZjEyZWNmNzU3ZCIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNoSGFzaHsGOgtub3RpY2UiGllvdSBhcmUgbm93IGxvZ2dlZCBpbgY6Kn7j4MkewY7CEY%3D--18f67a3aa5cd039a23521dbf8d6be84e2ad55vnd; domain=.website.com; path=/; HttpOnly 

、これはシオマネキが、私はこの正規表現パターンを試してみたが、私はと良いことないよので、それは

(.*?)=(.*?)($|;|,(?!)) 

いずれも動作しませんでしたそれを

Set-Cookie: blacklisted_tags=; path=/ 
Set-Cookie: 
Set-Cookie: locale=en; path=/ 
Set-Cookie: 
Set-Cookie: login=UserName; path=/; expires=Mon, 17-Apr-2017 17:34:43 GMT 
Set-Cookie: 
Set-Cookie: pass_hash=06xdbf50dfddb67f04352673g85o2645d7399xv; path=/; expires=Mon, 17-Apr-2017 17:34:43 GMT 
Set-Cookie: _session=BAh7CDoMdXNlcl9pZGkDgGMBOg9hi4X9W9uX2lkIiVhNTBmOWYxMWZmYWY4ZjE4MTc3NWUxZjEyZWNmNzU3ZCIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNoSGFzaHsGOgtub3RpY2UiGllvdSBhcmUgbm93IGxvZ2dlZCBpbgY6Kn7j4MkewY7CEY%3D--18f67a3aa5cd039a23521dbf8d6be84e2ad55vnd; domain=.website.com; path=/; HttpOnly 

を解析する方法であります正規表現私は誰かが正しいパターンで私を助けることを望んでいた。

ありがとうございます。

+0

https://github.com/LYF610400210/CookieParserまたはhttps://github.com/keyvan/CommaDelimitedCookieParser4DotNet –

+0

このようなCookieコンテナを使用してURLをお知らせください。 –

+0

@WiktorStribiżew私はCookieParserを前に試してみましたが、NSFWだから私はここに投稿することはできませんが、URLを助けてくれませんでした。しかし、あなたはgoogle "Sankaku Channel"で入手できます。私は、そのイメージボードから写真をダウンロードするツールに取り組んでいます。そして、私はページ50(あなたはクッキーなしで404を得るでしょう!)を超えて解析できるように、クッキーが必要です。 – PavilionVI

答えて

2

あなたが知っている場合は - ちょうどSystem.Net.CookieContainerを使用してください。 Cookieを解析するとエラーが発生する可能性がありますが、CookieContainerはそれを実行できます。

+0

CookieContainerは最初のもの(blacklisted_tags)のみを返し、null値がこの問題(,,)を引き起こしていると思います – PavilionVI

0

私はそれを理解した人は絶対にありません!

私はこの小さな関数を書いています。この小さな関数は、レスポンスのSet-Cookieヘッダをパラメータとしてとり、与えられたクッキー名の値を返します。あなたはこの機能と間違って何かがあると思う場合は、あなたの考えを共有してください

string passHash = CookieValue(Response.Headers[HttpResponseHeader.SetCookie], pass_hash); 

:どのように使用する

private string CookieValue(string header, string name) 
{ 
    Match M = Regex.Match(header, string.Format("{0}=(?<value>.*?);", name)); 
    return (M.ToString().Split('=')[1]); 
} 

+0

値に ';'が含まれる可能性はありますか?はいの場合、これは失敗します。正規表現を実行する前にすべての 'name'のリストを取得できますか? –

+0

@WiktorStribiżewはい値にはセミコロン ';'が含まれますが、文字列の削除/置換を使用して削除できます。また、2番目の質問では、上記のResponse.Headers [HttpResponseHeader.SetCookie]応答のセットクッキーヘッダーから(私の質問の最初のコードブロックをチェックしてください)、単一のセットクッキーヘッダーがある場合にのみ動作することに注意してください。 – PavilionVI

+0

私は、 ';'が "name = part1; par2; part3;"のように値の中に入ることができるかどうか尋ねるつもりでした。 'part1; par2; part3'が必要です。あなたの正規表現は 'part1'だけを抽出します。 –

関連する問題