reqwest 库来编写一个软件下载的接口
时间: 2024-04-13 18:24:54 浏览: 177
当使用 reqwest 库编写软件下载接口时,你可以结合 Rust 的 web 框架(比如 Actix-web)来创建一个 HTTP 服务器,然后设置一个路由来处理下载请求。以下是一个示例:
首先,在 `Cargo.toml` 文件中添加所需的依赖:
```toml
[dependencies]
actix-web = "3.3"
reqwest = "0.11"
tokio = { version = "1", features = ["full"] }
```
然后,你可以创建一个 Rust 文件,比如 `main.rs`,并编写以下代码:
```rust
use actix_web::{get, web, App, HttpResponse, HttpServer};
use std::fs::File;
use std::io::Write;
#[get("/download")]
async fn download_file() -> HttpResponse {
// 创建一个文件来保存下载的内容
let mut file = match File::create("downloaded_file.txt") {
Ok(file) => file,
Err(_) => return HttpResponse::InternalServerError().finish(),
};
// 发起 HTTP 请求并获取响应
let response = match reqwest::get("http://example.com").await {
Ok(response) => response,
Err(_) => return HttpResponse::InternalServerError().finish(),
};
// 检查响应状态码
if response.status().is_success() {
// 将响应体写入文件
let mut content = match response.bytes().await {
Ok(content) => content,
Err(_) => return HttpResponse::InternalServerError().finish(),
};
if let Err(_) = io::copy(&mut content, &mut file) {
return HttpResponse::InternalServerError().finish();
}
println!("文件下载完成!");
HttpResponse::Ok().finish()
} else {
HttpResponse::InternalServerError().finish()
}
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| {
App::new().service(download_file)
})
.bind("127.0.0.1:8080")?
.run()
.await
}
```
以上代码使用了 Actix-web 框架创建了一个简单的 HTTP 服务器,并使用 reqwest 库来发送 HTTP 请求和获取响应。当访问 `/download` 路由时,它会从服务器下载文件并保存到名为 `downloaded_file.txt` 的文件中。
请注意,这只是一个简单的示例,实际应用中可能需要更多的错误处理和逻辑。确保在实际使用时根据需求进行适当的修改和调整。
希望这可以帮助到你!如果你有任何其他问题,请随时问我。
阅读全文