3

次のコード スニペットを使用して、Android の DefaultHttpClient を使用して送信された Android の http 要求に Cookie を追加しています。

CookieStore cookieStore = new BasicCookieStore();
BasicClientCookie2 cookie = new BasicClientCookie2("AUTH_TOKEN", "MY_TOKEN");
cookie.setVersion(1);
cookie.setDomain("my.domain.com");
cookie.setPath("/");
cookieStore.addCookie(cookie);

context.setAttribute(ClientContext.COOKIE_STORE, cookieStore);

サーバーで受信したCookieの値を見ると、

Cookie: $Version=1; AUTH_TOKEN="MY_TOKEN"

しかし、私が期待しているのは(引用符がないことに注意してください):

Cookie: $Version=1; AUTH_TOKEN=MY_TOKEN

残念ながら、余分な引用符はサーバー (私は管理していません) を停止させ、Cookie を完全に無視します。

BasicClientCookieひょんなことから代わりに使ってみBasicClientCookie2ました。これに対する修正はありますか、それとも明らかな何かが欠けていますか?

4

2 に答える 2

4

どうやら、この SO answercookie.setVersion(0);によると、Cookie 仕様のバージョン 0 では引用符が無効であるため、Cookie を呼び出すとこれが修正されるはずです。

私の場合、これがリクエストで送信しなければならなかった唯一の Cookie だったので、自分でヘッダーとして追加するだけで済みました。

post.addHeader("Cookie", "AUTH_TOKEN=" + myAuthToken);

于 2013-11-25T21:50:52.357 に答える
0

RFC6265:

cookie-header = "Cookie:" OWS cookie-string OWS
cookie-string = cookie-pair *( ";" SP cookie-pair )
cookie-value = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE )

そのため、ユーザー エージェントは値を引用符で囲んでもよい (MAY)。

于 2013-11-12T15:13:10.150 に答える