私はHTTPリクエストを送信するのにHyperを使用していますが、応答に複数のCookieが含まれている場合、Hyperはそれらを結合して解析手順に失敗します。出力は...Hyperでは、複数のSet-Cookieヘッダーを正しく処理する方法は?
let client = Client::new();
let response = client.get("http://local.example.com/test.php")
.send()
.unwrap();
println!("{:?}", response);
for header in response.headers.iter() {
println!("{}: {}", header.name(), header.value_string());
}
ます:以下の錆コードのためしかし
$ curl -sLD - http://local.example.com/test.php
HTTP/1.1 200 OK
Date: Sat, 24 Dec 2016 09:24:04 GMT
Server: Apache/2.4.25 (Unix) PHP/7.0.14
X-Powered-By: PHP/7.0.14
Set-Cookie: hello=world
Set-Cookie: foo=bar
Content-Length: 0
Content-Type: text/html; charset=UTF-8
:たとえば、ここでは簡単なPHPスクリプトはカールを使用して
<?php
setcookie("hello", "world");
setcookie("foo", "bar");
応答
をですbe:
Response { status: Ok, headers: Headers { Date: Sat, 24 Dec 2016 09:31:54 GMT, Server: Apache/2.4.25 (Unix) PHP/7.0.14, X-Powered-By: PHP/7.0.14, Set-Cookie: hello=worldfoo=bar, Content-Length: 0, Content-Type: text/html; charset=UTF-8, }, version: Http11, url: "http://local.example.com/test.php", status_raw: RawStatus(200, "OK"), message: Http11Message { is_proxied: false, method: None, stream: Wrapper { obj: Some(Reading(SizedReader(remaining=0))) } } }
Date: Sat, 24 Dec 2016 09:31:54 GMT
Server: Apache/2.4.25 (Unix) PHP/7.0.14
X-Powered-By: PHP/7.0.14
Set-Cookie: hello=worldfoo=bar
Content-Length: 0
Content-Type: text/html; charset=UTF-8
これは私にとって本当に奇妙なようです。私は応答をキャプチャするためにWiresharkを使用しました。と2つのSet-Cookie
ヘッダーがあります。私はハイパードキュメントもチェックしましたが、手がかりはありませんでした。
Hyperは内部的にVecMap<HeaderName, Item>
を使用してヘッダーを格納しています。それで彼らはそれらを一つに結びつけるのですか?その後、どのように個々のクッキーに分割する必要がありますか?
これは本当に役に立ちます。ありがとうございます。私は 'ハイパー'は、セミコロン分割と1つのヘッダーフィールドでクッキーを組み合わせることを好むかもしれないと思う...(http://hyper.rs/hyper/async/hyper/header/struct.Cookie.html) –
ようこそ!ええ、ライブラリーのサーバー側でコードを再利用することは、クッキーを一緒に保つもう一つの良い理由のように聞こえます。 – ArtemGr