【发布时间】:2022-02-27 07:30:59
【问题描述】:
我正在编写一个向网站发出 GET 请求并返回响应 cookie 的函数:
extern crate futures;
extern crate hyper;
extern crate tokio_core;
use tokio_core::reactor::Core;
use hyper::Client;
use std::error::Error;
use hyper::header::Cookie;
use futures::future::Future;
fn get_new_cookie() -> Result<String, Box<Error>> {
println!("Getting cookie...");
let core = Core::new()?;
let client = Client::new(&core.handle());
println!("Created client");
let uri = "http://www.cnn.com".parse().expect("Cannot parse url");
println!("Parsed url");
let response = client.get(uri).wait().expect("Cannot get url.");
println!("Got response");
let cookie = response
.headers()
.get::<Cookie>()
.expect("Cannot get cookie");
println!("Cookie: {}", cookie);
Ok(cookie)
}
fn main() {
println!("{:?}", get_new_cookie());
}
这不起作用;它卡在client.get(...) 字符串上。我得到的输出是:
Getting cookie...
Created client
Parsed url
然后什么都没有发生。
我做错了什么以及如何更改它以使其正常工作?
【问题讨论】:
-
这与 cookie 有什么关系?问题出在
let response行中,与cookie 完全无关。 -
服务器返回的cookies在
Set-Cookie标头中;Cookie标头用于向服务器发送 cookie 的请求。