【问题标题】:How to use actix_web::client::Client in Actix-web 4.0如何在 Actix-web 4.0 中使用 actix_web::client::Client
【发布时间】:2021-11-04 01:42:39
【问题描述】:

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

任何想法仍然使用带有reqest 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()))
}

【问题讨论】:

    标签: rust actix-web scylla


    【解决方案1】:

    这在actix_web Changes.md for v4.0 中有所提及:

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

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

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

    【讨论】:

      【解决方案2】:

      这是我用来运行 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
      }
      

      最好的!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-20
        • 2020-01-19
        • 2019-10-26
        相关资源
        最近更新 更多