如何在 Actix-web 4.0 中使用 actix_web::client::Client

Pam*_*uda 4 rust scylla actix-web

我使用 crate scylla 使用 tokio 1,所以我必须使用 crate actix-web 4.0 beta。现在我遇到使用 actix_web::client::Client 显示错误的问题:

3 | use actix_web::client::Client;
  |                ^^^^^^ could not find `client` in `actix_web`

Run Code Online (Sandbox Code Playgroud)

我想使用以下代码访问 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))
}

Run Code Online (Sandbox Code Playgroud)

是否仍然使用 actix-web 4 和 reqest post insede 处理函数?谢谢

使用 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()))
}

Run Code Online (Sandbox Code Playgroud)

kmd*_*eko 8

actix_web v4.0 的Changes.md中提到了这一点:

client模组已被删除。客户端现在应该awc直接使用。

自 1.0 版本发布以来,该actix_web::client模块长期以来一直是板条箱的包装器,但他们现在似乎希望将它们完全分开。awc

类型awc应该与之前版本中公开的类型几乎相同actix_web,但是如果您将其与(当前处于测试版)一起使用actix_web:4.0,那么您将需要使用awc:3.0(当前处于测试版)以实现兼容性。