我正在使用 Rust 2018 Stable 和 Actix-Web 编写 Web 服务。使用 Reqwest,我正在从一个路由处理程序函数中向不同站点发出 HTTP 请求。简单地说它看起来像这样
extern crate reqwest;
use actix_web;
use reqwest::Url;
pub fn testing(req: actix_web::HttpRequest) -> actix_web::Result<actix_web::HttpResponse> {
println!(">>> testing request begin");
let url = Url::parse("https://example.com/").unwrap();
println!(">>> testing url built");
let req = reqwest::Client::new().post(url);
println!(">>> testing req prepared");
let res_struct = req.send();
println!(">>> testing res_struct received");
let res = res_struct.unwrap();
println!(">>> testing res unwrapped");
Ok(format!("done.").into())
}
这不起作用,我收到以下错误消息(错误打印了 8 次,“worker:1”到“worker:8”,尽管只调用了一次函数):
thread 'actix-rt:worker:1' panicked at 'called `Result::unwrap()`
on an `Err` value: Error(BlockingClientInFutureContext,
"https://www.example.com/")', src/libcore/result.rs:999:5
Panic in Arbiter thread, shutting down system.
谷歌在"BlockingClientInFutureContext"上没有发现任何有用的东西,但我猜它与 async/await 或 Tokio 自己的未来有某种关系?
感谢您提供有关阅读内容的任何指示。另外,我是 Rust 的新手。
从 Actix-Web HTttpServer 调用处理函数:
HttpServer::new(|| App::new().service(
web::resource("/testing").route(
web::get().to(views::testing)
)
)).bind("127.0.0.1:8001")?.run()