2个不稳定版本

使用旧的Rust 2015

0.1.1 2017年6月26日
0.0.0 2017年5月9日

#28 in #hyper-client


用于nessus

MIT许可证

33KB
558

路跑者 (RR)

路跑者是一个基于hyper项目的Rust Rest客户端,提供了一个用户友好的接口。

API接口部分受到unirest java库的启发。

为什么?

我最近开始关注Rust,并注意到Rust中的REST客户端选择似乎有限。Hyper客户端和一些libcurl绑定对我来说似乎相当底层。

另一个重要原因是,编写一个库(无论大小如何)似乎是一个开始学习新语言的好方法。 :)

文档

cargo doc生成的文档.

示例

(除了下面的示例之外,还有一个使用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