Reqwestライブラリを使用してCookieを使用してWebサイトにGETリクエストを行う必要があります。 GETリクエストを送信する方法を理解しました。
let response = reqwest::get("http://example.com")?;
同じリクエストを送信しますが、カスタムヘッダーを追加するにはどうすればよいですか?
クレートのドキュメント から始めて、次のように表示されます。
単一のリクエストの場合、
get
ショートカットメソッドを使用できます。
get
のドキュメント 状態:
この関数は、呼び出しごとに新しい内部
Client
を作成するため、多くのリクエストを行う場合は使用しないでください。代わりにClient
を作成します。
Client
には、次のようなrequest
メソッドがあります。
RequestBuilder
を返します。これにより、送信前にヘッダーとリクエスト本文を設定できます。
RequestBuilder
には header
メソッド があります。これは次のように使用できます。
use reqwest::header::USER_AGENT;
let client = reqwest::Client::new();
let res = client
.get("https://www.Rust-lang.org")
.header(USER_AGENT, "My Rust Program 1.0")
.send()
.await?;
カスタムヘッダーを追加するにはどうすればよいですか?
header
のシグネチャを見ると、ジェネリック型を受け入れることがわかります。
pub fn header<K, V>(self, key: K, value: V) -> RequestBuilder where
HeaderName: TryFrom<K>,
<HeaderName as TryFrom<K>>::Error: Into<Error>,
HeaderValue: TryFrom<V>,
<HeaderValue as TryFrom<V>>::Error: Into<Error>,
HeaderName
に対するTryFrom<&'a str>
の実装 があるため、文字列リテラルを使用できます。
use reqwest; // 0.10.0
use tokio; // 0.2.6
#[tokio::main]
async fn main() -> Result<(), reqwest::Error> {
let client = reqwest::Client::new();
let res = client
.get("https://www.Rust-lang.org")
.header("X-My-Custom-Header", "foo")
.send()
.await?;
Ok(())
}
バージョン〜0.9.19のreqwestクライアントでCookieを送信する
use reqwest; // 0.9.19
use http::{HeaderMap, HeaderValue, header::{COOKIE}};
// create client first
let init_client = reqwest::Client::builder()
.cookie_store(true).build().unwrap();
// create Header Map
// Here cookie store is optional based on if making more than one request with the // same client
let mut headers = HeaderMap::new();
headers.insert(COOKIE, HeaderValue::from_str("key=value").unwrap());
let resp = init_client.get("api")
.headers(headers)
.query(&[("name", "foo")])
.send()
.map(|resp|{
println!("{:?}", resp.status());
resp
})
.map_err(|err|{
println!("{:?}", err);
err
});
これが役立つことを願っています。