13个版本
0.5.1 | 2021年7月18日 |
---|---|
0.5.0 | 2021年1月9日 |
0.4.3 | 2020年11月18日 |
0.3.1 | 2020年7月20日 |
0.1.1 | 2018年12月26日 |
在配置中排名第542
每月下载量27次
330KB
3.5K SLoC
Spirit-hyper
一个用于创建配置reqwest客户端和保持配置更新的助手。它是spirit系统的一部分。
许可证
许可协议为以下之一
- Apache License, Version 2.0, (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确表示,否则根据Apache-2.0许可证定义,您有意提交的任何贡献,包括在作品中,都应按上述方式双重许可,不附加任何额外条款或条件。
lib.rs
:
这是spirit
系统的一部分。
有两种级别的支持。第一种是让Spirit
加载ReqwestClient
配置片段,并调用其方法之一来创建Client
或其他。
另一种更方便的方法是将提取函数与AtomicClient
配对,并让Spirit
始终在其中保持Client
的最新版本。
分割和功能
ReqwestClient
位于crate的顶部。然而,reqwest
提供了HTTP客户端的阻塞和异步版本。因此,此crate提供了两个子模块,每个模块都提供了相应的支持(注意异步模块的名称为futures
,因为async
是一个关键字)。管道通过相关的IntoClient
转换进行配置,并安装到相关的AtomicClient
。
功能可以启用此处功能的一部分,并对应于reqwest
的一些功能。特别是
gzip
:开启enable-gzip
配置选项。brotli
:开启enable-brotli
配置选项。native-tls
:开启tls-identity
、tls-identity-password
和tls-accept-invalid-hostnames
选项。blocking
:整个blocking
模块以及创建阻塞客户端和构建器的相关方法。
从0.3版本迁移
- 您可能需要启用某些功能(如果您想继续使用阻塞API,则需要
blocking
功能,但您可能还希望开启native-tls
和gzip
功能以获得相同的功能覆盖)。 - 您使用的一部分已移动到子模块,但其他部分应具有相同或类似的API
- 在配置提取和安装之间,需要添加
.transform(IntoClient)
,以选择您是否对阻塞或异步版本感兴趣。
示例
use serde::Deserialize;
use spirit::{Empty, Pipeline, Spirit};
use spirit::prelude::*;
use spirit_reqwest::ReqwestClient;
// Here we choose if we want blocking or async (futures module)
use spirit_reqwest::blocking::{AtomicClient, IntoClient};
#[derive(Debug, Default, Deserialize)]
struct Cfg {
#[serde(default)]
client: ReqwestClient,
}
impl Cfg {
fn client(&self) -> ReqwestClient {
self.client.clone()
}
}
fn main() {
let client = AtomicClient::unconfigured(); // Get a default config before we get configured
Spirit::<Empty, Cfg>::new()
.with(
Pipeline::new("http client")
.extract_cfg(Cfg::client)
// Choose if you want blocking or async client
// (eg. spirit_reqwest::blocking::IntoClient or
// spirit_reqwest::futures::IntoClient)
.transform(IntoClient)
// Choose where to store it
.install(client.clone())
)
.run(move |_| {
let page = client
.get("https://www.rust-lang.net.cn")
.send()?
.error_for_status()?
.text()?;
println!("{}", page);
Ok(())
});
}
依赖项
~6–22MB
~342K SLoC