6

Hyperを使ってURLの中身(本文)をテキスト表示してみた

extern crate hyper;

use hyper::client::Client;
use std::io::Read;

fn main () {

    let client = Client::new();
    let mut s = String::new();

    let res = client.get("https://www.reddit.com/r/programming/.rss")
                    .send()
                    .unwrap()
                    .read_to_string(&mut s)
                    .unwrap();

    println!("Result: {}", res);

}

ただし、このスクリプトを実行すると、本体のサイズが返されます。

Result: 22871

私は何を間違えましたか?私は何かを誤解しましたか?

4

3 に答える 3

13

の結果を読み込んでgetsますが、この関数の結果を出力しています。これは、読み取ったバイト数です。のドキュメントを参照してくださいRead::read_to_string

したがって、取得したコンテンツを出力するコードは次のとおりです。

extern crate hyper;

use hyper::client::Client;
use std::io::Read;

fn main () {

    let client = Client::new();
    let mut s = String::new();

    let res = client.get("https://www.reddit.com/r/programming/.rss")
                    .send()
                    .unwrap()
                    .read_to_string(&mut s)
                    .unwrap();

    println!("Result: {}", s);

}
于 2016-07-01T14:45:41.117 に答える
6

tokio 0.2、hyper 0.13、および async/await 構文を使用して、応答ステータスと本文を出力する方法を次に示します。

use std::error::Error;

use hyper::body;
use hyper::{Body, Client, Response};
use hyper_tls::HttpsConnector;
use tokio;

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
    let https = HttpsConnector::new();
    let client = Client::builder().build::<_, Body>(https);

    let res = client
        .get("https://www.reddit.com/r/programming/.rss".parse().unwrap())
        .await?;

    println!("Status: {}", res.status());

    let body_bytes = body::to_bytes(res.into_body()).await?;
    let body = String::from_utf8(body_bytes.to_vec()).expect("response was not valid utf-8");
    println!("Body: {}", body);

    Ok(())
}
于 2019-12-20T16:40:17.523 に答える