0

この質問の投稿者と同じ問題があります: httplib2, how to set multiple cookie?

クッキーはこんな感じ。

PHPSESSID=8527b5532b6018aec4159d81f69765bd; path=/; expires=Fri, 19-Feb-2010 13:52:51 GMT, id=1578; expires=Mon, 22-Feb-2010 13:37:51 GMT, password=123456; expires=Mon, 22-Feb-2010 13:37:51 GMT, sid=8527b5532b6018aec4159d81f69765bd

コンマとセミコロンを使用して Cookie を区切る方法に注意してください。ただし、コンマは Cookie 自体でも使用されます。

これは複雑すぎて、適切に分離するための正規表現を書くことができません。

4

2 に答える 2

1

Cookieを区切るためにコンマとセミコロンを使用する方法に注意してください。ただし、Cookie自体でもコンマが使用されます。

引用されているように、あいまいなコンマは、文字列を正規表現やその他のツールで解析できないようにします。その文字列はどこから来ていますか?

ヘッダー値としては、Set-Cookie:完全に無効であり、どのブラウザーでも機能しません。ブラウザはPHPSESSIDをセッションCookieとして設定し(有効期限の日付形式は余分なコンマで無効になるため)、残りは無視します。複数のCookieは、Set-Cookie1つに結合するのではなく、複数のヘッダーで設定する必要があります。

編集:OK、起こっているようですが、httplib2はstdlibemailパッケージを使用してHTTP応答データを処理してヘッダーを解析しています。電子メールでは、RFC822ファミリの標準では、同じ名前の複数のヘッダー(To:アドレスなど)が、値がコンマで結合された単一のヘッダーと同等である必要があります。

ただし、HTTP応答は明示的にRFC822ファミリの標準ではありません。これらをこのように扱うことはまったく不適切です。emailを使用してHTTP応答を解析するhttplib2と、複数回使用されるヘッダーを正しく処理できなくなり、Set-Cookieヘッダーはそのように頻繁に使用されるように見えます。このため、私はhttplib2根本的に壊れていると考えており、使用しないことをお勧めします。

于 2010-02-19T14:22:40.733 に答える
1

cookielib / http.cookiejarを試しましたか?


クッキーをこう解釈すると

PHPSESSID=8527b5532b6018aec4159d81f69765bd;
path=/;
expires=Fri, 19-Feb-2010 13:52:51 GMT, id=1578;
expires=Mon, 22-Feb-2010 13:37:51 GMT, password=123456; 
expires=Mon, 22-Feb-2010 13:37:51 GMT, sid=8527b5532b6018aec4159d81f69765bd

次に、セミコロンのみが真の区切り記号であり、コンマ区切り記号は、その前に有効期限があるためです。

有効期限に興味がない場合は、1 つの正規表現を使用して有効期限を除外できます。

s/expires=[^,]+,[^,]+, //g

次に、文字列全体を で区切り、ペア;として解析します。key=value

于 2010-02-19T14:03:18.707 に答える