2017-02-24 3 views
1

Ich möchte den Cookie einer früheren Anfrage für die nächste halten können:Keeping Cookie zwischen Transaktionen mit Hyper

let hyper_client = Client::new(); 
server_response = hyper_client.request(Method::Get, url).headers(Headers::new()).send(); 

den Code oben Kompilierung Unter der Annahme, wie könnte ich das Cookie von dieser Sitzung abrufen ?

Antwort

1

So etwas sollte funktionieren:

match server_response.headers.get() { 
    Some(&SetCookie(ref content)) => println!("Cookie: {:?}", content), 
    _ => println!("No cookie found"), 
} 

Verwenden Sie den Cookie Header für Cookies - den Server gesendet, und SetCookie für Cookies gesendet von der Server. Ich betone das, weil ich zuerst Cookie gesehen habe und es mich erwischt hat.

Beachten Sie auch, dass ich die SetCookie Header nur nach Typ Inferenz von der Musterübereinstimmung anfordern. Ich hätte auch den Turbo-Fisch verwenden können: headers.get::<SetCookie>().

Wenn Sie das gleiche Cookie senden müssen zurück auf den Server, können Sie einfach klonen die SetCookie Werte aus der Antwort zurück in einen neuen Cookie Header für die Anfrage:

let mut headers = Headers::new(); 
// if you received cookies in the server response then send the same ones back 
if let Some(&SetCookie(ref content)) = server_response.headers.get() { 
    headers.set(Cookie(content.clone())); 
} 

hyper_client.request(Method::Get, url) 
    .headers(headers) 
    .send(); 
+0

Groß Ich kann es jetzt abrufen! Aber ich kann es nicht wiederverwenden ... Ich habe versucht, 'headers.set (content)' zu tun und ... es funktioniert nicht ... Ich denke, dass ich 'SetCookie' und' Cookie' verwechsle, einige Hilfe ? – SirC

+0

Ich habe ein Beispiel hinzugefügt, um die gleichen Cookie-Werte zurück an den Server zu senden –