10 个版本
新版本 0.4.0 | 2024年8月17日 |
---|---|
0.3.3 | 2022年11月4日 |
0.3.2 | 2022年1月11日 |
0.2.2 | 2022年1月6日 |
0.1.1 | 2020年3月16日 |
#338 在 网页编程
27,217 每月下载量
用于 36 个 crates (29 直接)
25KB
319 行(不包括注释)
parse_link_header
解析 HTTP Link 标头的库。
使用方法
0.1.x 版本说明
0.1 版本无法正确处理在 https://tools.ietf.org/html/rfc3986#section-4.1 中描述的 relative ref
0.1 版本的解析值引用了 https://github.com/thlorenz/parse-link-header 的返回值,这是一个具有相同结构的 HashMap
所以如果你想解析 relative ref
,请使用版本 >=0.2
。
或者如果你不关心 relative ref
并且想要一个简单的 HashMap<String, HashMap<String, String>>
结果,你可以使用版本 0.1
示例
在您的 Cargo.toml
文件中添加
[dependencies]
parse_link_header = "0.4"
然后
let link_header = r#"<https://api.github.com/repositories/41986369/contributors?page=2>; rel="next", <https://api.github.com/repositories/41986369/contributors?page=14>; rel="last""#;
let res = parse_link_header::parse(link_header);
assert!(res.is_ok());
let val = res.unwrap();
assert_eq!(val.len(), 2);
assert_eq!(val.get(&Some("next".to_string())).unwrap().raw_uri, "https://api.github.com/repositories/41986369/contributors?page=2");
assert_eq!(val.get(&Some("last".to_string())).unwrap().raw_uri, "https://api.github.com/repositories/41986369/contributors?page=14");
解析值是一个 Result<HashMap<Option<Rel>, Link>, Error>
(即一个 LinkMap
),其中 Rel
和 Link
是
use std::collections::HashMap;
#[cfg(not(feature = "url"))]
use http::Uri;
#[cfg(feature = "url")]
use url::Url as Uri;
#[derive(Debug, PartialEq)]
pub struct Link {
pub uri: Uri,
pub raw_uri: String,
pub queries: HashMap<String, String>,
pub params: HashMap<String, String>,
}
type Rel = String;
请注意,根据https://tools.ietf.org/html/rfc8288#section-3.3(2017年10月),rel参数必须存在。这就是为什么HashMap<Option<Rel>, Link>
的键是Option<Rel>
。因此,如果您发现键是None
,请检查您是否指定了rel
类型。
parse_with_rel
版本 >= 0.3.0
或者,使用parse_with_rel()
函数来获取一个HashMap<String, Link>
(即RelLinkMap
),如下所示:
let link_header = r#"<https://api.github.com/repositories/41986369/contributors?page=2>; rel="next", <https://api.github.com/repositories/41986369/contributors?page=14>; rel="last""#;
let res = parse_link_header::parse_with_rel(link_header);
assert!(res.is_ok());
let val = res.unwrap();
assert_eq!(val.len(), 2);
assert_eq!(val.get("next").unwrap().raw_uri, "https://api.github.com/repositories/41986369/contributors?page=2");
assert_eq!(val.get("last").unwrap().raw_uri, "https://api.github.com/repositories/41986369/contributors?page=14");
如果您确保头中存在rel
参数,则可以使用此函数。
特性: url
版本 >= 0.3.0
如果启用了url
功能,结构体parse_link_header::Link
中的uri
字段将是从url crate的url::Url
类型,而不是通常的http::uri::Uri
类型。这允许与其他使用url crate的库进行集成,例如reqwest。
注意:这隐式禁用了对相对引用的支持,因为URL不支持相对引用(而URI支持)。
如何贡献
提交一个请求或创建一个问题来描述您的更改或问题。
许可证
MIT @ g1eny0ung
依赖项
~2.6–4MB
~70K SLoC