Ich verwende Hyper, um HTTP-Anfragen zu senden, aber wenn mehrere Cookies in der Antwort enthalten sind, kombiniert Hyper sie zu einer, die dann die Analyseprozedur fehlschlägt.Wie behandelt man mehrere Set-Cookie-Header in Hyper korrekt?
Zum Beispiel, hier ist ein einfacher PHP-Skript
<?php
setcookie("hello", "world");
setcookie("foo", "bar");
Antwort mit curl:
$ 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
jedoch für den folgende Rust Code:
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());
}
... der Ausgang 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
Das scheint mir wirklich komisch zu sein. Ich benutzte Wireshark, um die Antwort zu erfassen, und es gibt zweiSet-Cookie
Header darin. Ich habe auch die Hyper-Dokumentation überprüft, aber keine Ahnung ...
Ich bemerkte, dass Hyper intern verwendet VecMap<HeaderName, Item>
, um die Header zu speichern. Also verketten sie die zu einem? Wie soll ich sie danach in einzelne Cookies aufteilen?
cool, das ist wirklich hilfreich, danke. Ich denke, "hyper" könnte die Kombination der Cookies in einem Header-Feld mit Semikolon Split bevorzugen ... (http://hyper.rs/hyper/async/hyper/header/struct.Cookie.html) –
Gern geschehen! Ja, es ist ein weiterer guter Grund, die Cookies zusammen zu halten, wenn man die Wiederverwendung von Code mit der Server-Seite der Bibliothek angeht. – ArtemGr