[一緒に Rust を学ぶ | 上級記事 | reqwest ライブラリ] pure Rust で書かれた HTTP クライアント - reqwest


序文

reqwest は、ブラウザの非同期 HTTP リクエスト用のシンプルかつ強力な RUST HTTP クライアントです。xmlHttpRequest、JSONP、CORS、および CommonJS 制約をサポートします。

Reqwest は使いやすく強力で、非同期モードとブロッキング モードを含み、さまざまなタイプの要求データを処理でき、HTTP プロキシ、TLS 暗号化、Cookie ストレージなどの機能をサポートし、WASM のサポートも含まれています。


1. インストールとリファレンス

プロジェクトの Cargo.toml に依存関係を追加します。

[dependencies]
reqwest = {
    
     version = "0.11", features = ["json"] }
tokio = {
    
     version = "1", features = ["full"] }

次に、プログラムでライブラリを参照します

use std::collections::HashMap;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    
    
    let resp = reqwest::get("https://httpbin.org/ip")
        .await?
        .json::<HashMap<String, String>>()
        .await?;
    println!("{:#?}", resp);
    Ok(())
}

上記のコードは reqwest ライブラリを参照し、API が

https://httpbin.org/ip

現在要求しているブラウザの IP アドレス (現在の IP アドレス) を返します。

この例を実行して効果を確認してください。

現在の IP アドレスを含む、API によって返された json 情報が取得されていることがわかります。

二、使い方

1. GET リクエストを作成する

単一のリクエストの場合は、get メソッドを使用できます

let body = reqwest::get("https://www.rust-lang.org")
    .await?
    .text()
    .await?;

println!("body = {:?}", body);

他の複数のリクエストを作成する場合は、再利用のために 1 つ作成することをお勧めしますClient

2. POST リクエストを作成する

POST リクエストの本文 (ボディ) を設定するには、いくつかの方法があります。

1. 最も基本的な方法は、RequestBuilder の body メソッドを使用することです。本体のオリジナルデータをセットするだけ。String や Vec<u8> など、さまざまな型を受け入れます。タイプをカスタマイズしたい場合は、reqwest::Body 構造を使用できます。

let client = reqwest::Client::new();
let res = client.post("http://httpbin.org/post")
    .body("the exact body that is sent")
    .send()
    .await?;

2.フォーム

リクエストボディでフォームデータを送信することは非常に一般的です。これは、フォーム データとしてシリアル化できる任意の型を使用して実行できます。Serialize トレイトを実装する限り、その型はタプル、HashMap、またはカスタム型にすることができます。

// 请求体是`foo=bar&baz=quux`
let params = [("foo", "bar"), ("baz", "quux")];
let client = reqwest::Client::new();
let res = client.post("http://httpbin.org/post")
    .form(&params)
    .send()
    .await?;

3.JSON形式

フォーム メソッドと同様に機能する RequestBuilder の json メソッド ツールもあります。JSON にシリアル化できる任意の値を受け入れることができます。JSON 機能は非常に必要です。

// 请求体 `{"lang":"rust","body":"json"}`
let mut map = HashMap::new();
map.insert("lang", "rust");
map.insert("body", "json");

let client = reqwest::Client::new();
let res = client.post("http://httpbin.org/post")
    .json(&map)
    .send()
    .await?;

4.リダイレクト

デフォルトでは、クライアントはリダイレクトを自動的に処理し、最大リダイレクト チェーンは 10 ホップです。この動作をカスタマイズするには、「redirect::Policy」を「ClientBuilder」と一緒に使用できます。

URLが別のURLにリダイレクトされる場合、直接リダイレクトされる場合は1ホップ、その中に転送がある場合は2ホップ、途中でN回の転送がある場合はN+1ホップ.

5. クッキー

セッション Cookie の自動保存と送信は、ClientBuilder の cookie_store メソッドを使用して有効にできます。

6. プロキシ

システム プロキシはデフォルトで有効になっています

Socks を使用している場合、プロキシ http および https は、環境変数 http_proxy および https_proxy を使用してプロキシを提供できます。このようにプロキシを設定できます (Linux 環境のみ)。

export https_proxy=socks5://127.0.0.1:1086

Windows 環境の場合は、reqwest::Proxy 構造を使用できます。たとえば、

let proxy = reqwest::Proxy::http("https://secure.example")?;

"https://secure.example"、プロキシを取得するための URL です。このプロキシはすべてのリクエストをインターセプトしてから、"https://secure.example"プロキシを使用します。

1 つのクライアントに対して複数のプロキシ ルールを構成できます。クライアントは、追加された順序で各プロキシをチェックします。これは、Proxy::all などの優先インターセプト ルールを使用してプロキシを最初に追加すると、リストの後半にあるプロキシが機能しなくなる可能性があるため、注意してください。

ソックス プロキシを有効にする

let proxy = reqwest::Proxy::http("socks5://192.168.1.1:9000")?;

7. ブロッキング リクエストの使用

ブロッキング クライアントは、実行を継続するために直接戻るのではなく、現在のスレッドの実行をブロックします。ただし、 reqwest::blocking の関数は非同期ランタイム内で実行できません。そうしないと、ブロックしようとするとクラッシュします。

プロジェクトの Cargo.toml に依存関係を追加します。

reqwest = {
    
     version = "0.11", features = ["blocking", "json"] }

次に、このようにコードを記述します

use std::collections::HashMap;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    
    
    let resp = reqwest::blocking::get("https://httpbin.org/ip")?
        .json::<HashMap<String, String>>()?;
    println!("{:#?}", resp);
    Ok(())
}

1. GET リクエストを作成する

ブロッキング Response 構造体は Rust の Read トレイトを実装しているため、多くの便利な標準および 2 番目のライブラリには、読み取りが受け入れられる場所ならどこでも応答を取得するための便利なメソッドがあります。

let body = reqwest::blocking::get("https://www.rust-lang.org")?
    .text()?;

println!("body = {:?}", body);

複数のリクエストを送信する場合は、クライアントを作成することをお勧めします。

2. POST リクエストを作成する

POSTリクエストの作り方は基本的にノンブロッキングと同じですが、リクエストボディの型をカスタマイズしたい場合は構築方法を使う必要があり、ノンブロッキングとの違いはこれだけですreqwest::blocking::Body::new()。非ブロッキングのものを参照してください。

let client = reqwest::blocking::Client::new();
let res = client.post("http://httpbin.org/post")
    .body("the exact body that is sent")
    .send()?;

要約する

この号では、純粋な Rust で書かれた HTTP クライアント --reqwest について学び、HTTP インターフェースを要求する方法をいくつか学びました。

  • GET、POST リクエストを作成する
  • プロキシを使う
  • リダイレクト
  • クッキーの取り扱い

このライブラリは基本的にあらゆる種類のプログラミング言語の重要な部分です. リクエストを開始できれば Web サーバーとやり取りできます. やり取りできればより多くの機能を実現できます. それは間違いなく次の非常に重要な部分になるでしょう. -アップ。

おすすめ

転載: blog.csdn.net/weixin_47754149/article/details/126651896