如何从Rust发出HTTP请求?我在核心图书馆里找不到任何东西.

我不需要解析输出,只需发出请求并判断HTTP响应代码.

如果有人能告诉我如何对我的URL上的查询参数进行URL编码,我会得到额外的奖励!

推荐答案

Update: This answer refers to fairly ancient history. For the current best practices, please look at Isaac Aggrey's answer instead.


我一直在研究rust-http,它已经成为用于Rust的de facto HTTP库(Servo使用它);目前,它还远未完成,而且记录得非常糟糕.下面是一个发出请求并使用状态代码执行操作的示例:

extern mod http;
use http::client::RequestWriter;
use http::method::Get;
use http::status;
use std::os;

fn main() {
    let request = RequestWriter::new(Get, FromStr::from_str(os::args()[1]).unwrap());
    let response = match request.read_response() {
        Ok(response) => response,
        Err(_request) => unreachable!(), // Uncaught condition will have failed first
    };
    if response.status == status::Ok {
        println!("Oh goodie, I got me a 200 OK response!");
    } else {
        println!("That URL ain't returning 200 OK, it returned {} instead", response.status);
    }
}

使用URL作为唯一的命令行参数运行此代码,它将判断状态代码!(仅限HTTP;无HTTPS.)

src/examples/client/client.rs相比,这个例子做得更多一些.

rust http正在跟踪rust的主分支 目前,它将在刚刚发布的Rust 0.8中工作,但很快可能会出现突破性的变化 一百


至于查询字符串编码问题,目前应该使用extra::url::Query(~[(~str, ~str)]的typedef).转换的适当功能:

Rust相关问答推荐

使用DeliverProcess W或ShellExecuteExW复制Windows Run行为?

如何在Rust中获得高效的浮点最大值

即使参数和结果具有相同类型,fn的TypId也会不同

为什么拥有的trait对象的相等运算符移动了正确的操作数?

如果A == B,则将Rc A下推到Rc B

在函数内定义impl和在函数外定义impl的区别

下载压缩文件

使用 struct 外部的属性来改变 struct 的原始方式

为昂贵的for循环制作筛子

RUST应用程序正在退出,错误代码为:(退出代码:0xc0000005,STATUS_ACCESS_VIOLATION)

为什么`AlternateScreen`在读取输入键时需要按Enter键?

如何将实现多个特征的 struct 传递给接受这些特征为&;mut?

对于rustc编译的RISC-V32IM二进制文件,llvm objdump没有输出

是否提供Bundle 在可执行文件中的warp中的静态文件?

这是什么:`impl Trait for T {}`?

详尽的匹配模式绑定

为什么我们有两种方法来包含 serde_derive?

Rust 程序中的内存泄漏

有没有办法隐式绑定 let/match 操作的成员?

当你删除一个存在于堆栈中的值时,为什么 rust 不会抱怨