我试图遵循下面的示例:https://rust-lang-nursery.github.io/rust-cookbook/web/scraping.html,它同时使用Reqwest和Select来获取html响应,然后解析数据。
我使用的是Reqwest Version0.10.4并选择Version0.4.3,这就是它在示例中显示的版本。然而,我得到了一个错误:
error[E0277]: the trait bound `reqwest::Response: std::io::Read` is not satisfied
--> src/main.rs:19:25
|
19 | Document::from_read(res)?
| ^^^ the trait `std::io::Read` is not implemented for `reqwest::Response`
|
::: /root/.cargo/registry/src/github.com-1ecc6299db9ec823/select-0.4.3/src/document.rs:31:25
|
31 | pub fn from_read<R: io::Read>(mut readable: R) -> io::Result<Document> {
| -------- required by this bound in `select::document::Document::from_read`
似乎from_read方法接受Read类型,但reqWest::get方法返回不同的类型。在将响应传递给from_read方法之前,是否必须先进行某种转换?
下面是一个例子:
#[macro_use]
extern crate error_chain;
extern crate reqwest;
extern crate select;
use select::document::Document;
use select::predicate::Name;
error_chain! {
foreign_links {
ReqError(reqwest::Error);
IoError(std::io::Error);
}
}
fn main() -> Result<()> {
let res = reqwest::get("https://www.rust-lang.org/en-US/").await?;
Document::from_read(res)?
.find(Name("a"))
.filter_map(|n| n.attr("href"))
.for_each(|x| println!("{}", x));
Ok(())
}
reqWest::get
返回结果
,然后使用?
展开结果
,这意味着您现在有了一个response
对象。因为web调用可以成功地发生但仍然失败(请参见HTTP Non200代码),所以您应该检查响应代码,但由于这是为了了解,我们将忽略它。您需要的是一个实现std::io::read
特征的结构,阅读该结构会显示string
实现该特征。返回reqWest::Response
显示,我们可以使用text()
方法返回字符串。所以你的代码现在变成了
let res = reqwest::get("https://www.rust-lang.org/en-US/")
.await?
.text()
.await?;
从注释中更新:现在的问题是document::from_read
只接受std::Io::read
作为参数,std::string::string
不实现该特征,而不是使用类似于StringReader
的板条箱,我们可以简单地使用document::from
作为文档实现from<&'astr>
特征。
和几乎所有的事情一样,有多种方法可以解决这个问题。你可以
>
直接使用Document::from(res)
从字符串创建文档,或
将字符串转换为实现Read的字节片,并用document::from_read(res.as_bytes())
创建文档
我正在用JNI异步执行测试Rust。我想在Rust中执行请求,并用回调将结果异步返回到Android。我正在测试代码来执行命令行中的请求,它工作得很好。 这就是它在命令行上的工作方式: null null 我正在检查它是如何工作的,但示例似乎已经过时:*https://github.com/mozilla/rust-android-gradle/blob/master/samples/rust/s
我正在和reqwest图书馆乱搞,想用Rust Playground尝试一些例子。我从web上举了一个最简单的例子,但它不编译。 另一方面,当我在本地计算机(Windows10)上尝试相同的代码时,它确实会编译,但它会导致这个错误: 我已经检查了cargo.toml中的依赖关系: 我认为它与Async/Await运行时有关,但我对Rust语言是新手,我在web上找到的关于这个问题的信息对我来说并不
在过去的几天里,我通过使用reqwest板条箱在Rust中构建一个简单的CL下载管理器来处理HTTP的东西,来处理HTTP。我已经对协议的工作原理有了基本的了解--下载文件时要查找什么头,如何验证请求是否有效等等--但是我很难找到HTTP响应主体中实际字节存储在哪里的答案。 例如,使用reqwest发送请求并获得响应需要很少的时间,所以我认为在这个阶段不可能进行下载。实际上需要时间的是从正文中读取
reqwest 用于浏览器异步HTTP请求。支持xmlHttpRequest, JSONP, CORS, 和 CommonJS约束。 API reqwest('path/to/html', function (resp) { qwery('#content').html(resp)})reqwest({ url: 'path/to/html' , method: 'post' , da
问题内容: 大约几个小时前,我在Stack Overflow上询问了有关如何将char []转换为MD5哈希的方法。 Neil Smithline建议我使用BCrypt,但不能将其与char []一起使用。 我使用char []来存储从登录表单中检索到的密码的原因是因为仅支持char []。 当前,我正在尝试使用上面的代码生成哈希,但是由于变量passwordCars的类型为char [],因此不