如何在 Actix-web 4.0 中使用 actix_web::client::Client
How to use actix_web::client::Client in Actix-web 4.0
我使用的是使用 tokio 1 的 crate scylla,所以我必须使用 crate actix-web 4.0 beta。
现在我有问题,使用 actix_web::client::Client 显示错误:
3 | use actix_web::client::Client;
| ^^^^^^ could not find `client` in `actix_web`
我想使用此代码在 actix 处理程序中点击 API:
pub(crate) async fn proses_mapmatching(data: web::Data<AppState>) -> impl Responder {
let client = Client::default();
let res = client.post("http://localhost:8002/trace_route")
.send()
.await
.unwrap()
.body()
.await;
println!("Response: {:?}", res);
HttpResponse::Ok().body(format!("Hello {:?}", res))
}
是否仍然使用带有请求 post insede 处理函数的 actix-web 4?
谢谢
带有 AWC 的答案代码 - 感谢 @kmdreko 先生
pub(crate) async fn proses_mapmatching(data: web::Data<AppState>) -> impl Responder {
let mut client = awc::Client::default();
let response = client.post("http://localhost:8002/trace_route")
.send_body("Raw body contents")
.await;
println!("Response: {:?}", response.unwrap().body().await);
HttpResponse::Ok().body(format!("Hello {}!", rows.len()))
}
这在 actix_web
Changes.md for v4.0 中提到:
The client
mod was removed. Clients should now use awc
directly.
自 1.0 版本以来,actix_web::client
模块在很大程度上一直是 awc
板条箱的包装器,但现在他们似乎想将它们完全分开。
awc
中的类型应该与之前 actix_web
版本中公开的类型几乎相同,但是如果您将它与 actix_web:4.0
(目前处于测试阶段)一起使用,那么您我想使用 awc:3.0
(目前处于测试阶段)以实现兼容性。
这是我用来 运行 AWC 示例
Cargo.toml
[dependencies]
openssl = "0.10.38"
actix-web = "4.0.0-beta.12"
awc = { version = "3.0.0-beta.11", features = [ "openssl" ] }
main.rs
use awc::Client;
#[actix_web::main]
async fn main() {
let client = Client::new();
let res = client
.get("http://www.rust-lang.org") // <- Create request builder
.insert_header(("User-Agent", "Actix-web"))
.send() // <- Send http request
.await;
println!("Response: {:?}", res); // <- server http response
}
最佳!
我使用的是使用 tokio 1 的 crate scylla,所以我必须使用 crate actix-web 4.0 beta。 现在我有问题,使用 actix_web::client::Client 显示错误:
3 | use actix_web::client::Client;
| ^^^^^^ could not find `client` in `actix_web`
我想使用此代码在 actix 处理程序中点击 API:
pub(crate) async fn proses_mapmatching(data: web::Data<AppState>) -> impl Responder {
let client = Client::default();
let res = client.post("http://localhost:8002/trace_route")
.send()
.await
.unwrap()
.body()
.await;
println!("Response: {:?}", res);
HttpResponse::Ok().body(format!("Hello {:?}", res))
}
是否仍然使用带有请求 post insede 处理函数的 actix-web 4? 谢谢
带有 AWC 的答案代码 - 感谢 @kmdreko 先生
pub(crate) async fn proses_mapmatching(data: web::Data<AppState>) -> impl Responder {
let mut client = awc::Client::default();
let response = client.post("http://localhost:8002/trace_route")
.send_body("Raw body contents")
.await;
println!("Response: {:?}", response.unwrap().body().await);
HttpResponse::Ok().body(format!("Hello {}!", rows.len()))
}
这在 actix_web
Changes.md for v4.0 中提到:
The
client
mod was removed. Clients should now useawc
directly.
自 1.0 版本以来,actix_web::client
模块在很大程度上一直是 awc
板条箱的包装器,但现在他们似乎想将它们完全分开。
awc
中的类型应该与之前 actix_web
版本中公开的类型几乎相同,但是如果您将它与 actix_web:4.0
(目前处于测试阶段)一起使用,那么您我想使用 awc:3.0
(目前处于测试阶段)以实现兼容性。
这是我用来 运行 AWC 示例
Cargo.toml
[dependencies]
openssl = "0.10.38"
actix-web = "4.0.0-beta.12"
awc = { version = "3.0.0-beta.11", features = [ "openssl" ] }
main.rs
use awc::Client;
#[actix_web::main]
async fn main() {
let client = Client::new();
let res = client
.get("http://www.rust-lang.org") // <- Create request builder
.insert_header(("User-Agent", "Actix-web"))
.send() // <- Send http request
.await;
println!("Response: {:?}", res); // <- server http response
}
最佳!