2个不稳定版本
使用旧的Rust 2015
0.1.1 | 2017年6月26日 |
---|---|
0.0.0 | 2017年5月9日 |
#28 in #hyper-client
用于nessus
33KB
558 行
路跑者 (RR)
路跑者是一个基于hyper项目的Rust Rest客户端,提供了一个用户友好的接口。
API接口部分受到unirest java库的启发。
为什么?
我最近开始关注Rust,并注意到Rust中的REST客户端选择似乎有限。Hyper客户端和一些libcurl绑定对我来说似乎相当底层。
另一个重要原因是,编写一个库(无论大小如何)似乎是一个开始学习新语言的好方法。 :)
文档
示例
(除了下面的示例之外,还有一个使用RoadRunner客户端调用themoviedb.org即将上映电影的独立示例,请查看:https://github.com/luanzhu/movie_alert)
要运行下面的示例,请将RoadRunner添加到您的Cargo.toml
tokio-core = "0.1.6"
serde="1.0"
serde_json = "1.0"
serde_derive="1.0"
hyper = "0.11"
roadrunner = { git="https://github.com/luanzhu/roadrunner", branch="update-to-hyper-0.11" }
然后将它复制到您的main.rs
#[macro_use] extern crate serde_derive;
extern crate tokio_core;
extern crate serde_json;
extern crate hyper;
extern crate roadrunner;
// need both RestClient and RestClientMethods
use roadrunner::RestClient;
use roadrunner::RestClientMethods;
use hyper::StatusCode;
use serde_json::Value;
#[derive(Serialize, Deserialize, Debug, PartialEq)]
struct Address {
street: String,
city: String,
}
fn main () {
let mut core = tokio_core::reactor::Core::new().unwrap();
let original_typed = Address {
street: "135 College View Ave.".to_owned(),
city: "San Francisco".to_owned(),
};
let response = RestClient::post("http://mockbin.com/request")
.cookie("food", "bar")
.authorization_bearer("QWxhZGRpbjpvcGVuIHNlc2FtZQ".to_string())
.json_body_typed(&original_typed)
.execute_on(&mut core)
.unwrap();
println!("{:?}", response);
assert_eq!(*response.status(), StatusCode::Ok);
let json_value = response.content().as_value().unwrap();
assert_eq!(Value::String("application/json".to_owned()),
json_value["headers"]["content-type"]);
let data_str = json_value["postData"]["text"].as_str().unwrap();
println!("data_str : {:?}", data_str);
let response_typed: Address = serde_json::from_str(data_str).unwrap();
assert_eq!(original_typed, response_typed);
}
使用方法
高级
高级API通过RestClient
和trait RestClientMethods
中提供的方法来访问。
请参阅tests文件夹中的测试以获取更多示例。
低级
为了更好地控制请求配置,请使用request_for_response
。
高级RestClient
是这个函数的薄层。
支持的方法
- GET
- POST
- PUT
- PATCH
- DELETE
- OPTIONS
在tests文件夹中运行集成测试?
为了使测试自包含,所有集成测试都针对本地的httpbin容器(位于nginx容器后面)进行。
请在运行集成测试之前,在docker-httpbin
文件夹中运行start.sh
以启动两个本地容器(一个用于httpbin,另一个用于nginx)。
警告:由于 httpbin 最近的一个回归问题,httpbin.org 无法看到分块传输的请求体。在 httpbin 的错误修复之前,如果直接访问 httpbin.org,许多测试将失败。
将自签名 SSL 证书添加到您的 CA
Hyper 客户端依赖于 [rust-native-tls]((https://github.com/sfackler/rust-native-tls) 来处理 https 连接。然而,目前还没有允许使用自签名证书的简单选项。关于这个问题有一个 开放的问题。
(为什么不使用托管版本的 https 端点进行测试?你可能想知道。好吧,我个人想看看如何绕过这个问题。我认为在测试环境中使用自签名证书是相当常见的。对我来说,这个额外步骤在将来使用这个 rest 客户端或 hyper 客户端进行项目时,充当了一个练习。)
因此,在 docker 中使用的自签名证书(docker-httpbin/config/localhost.cert)必须设置为可信的(或添加到可信 CA 存储库)。否则,一个测试将失败。
参考资料
实现的一些部分基于来自
相关
依赖关系
~13–22MB
~329K SLoC