如何使用 Reqwest 设置请求 headers?
How do I set the request headers using Reqwest?
我需要使用 Reqwest 库向带有 cookie 的网站发出 GET 请求。我想出了如何发送 GET 请求:
let response = reqwest::get("http://example.com")?;
如何发送相同的请求但添加一些自定义 headers?
要求 0.10
从 crate's documentation 开始,我们看到:
For a single request, you can use the get
shortcut method.
This function creates a new internal Client
on each call, and so should not be used if making many requests. Create a Client
instead.
Client
有一个 request
方法,它指出:
Returns a RequestBuilder
, which will allow setting headers and request body before sending.
RequestBuilder
有一个 header
method。这可以用作:
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?;
How do I add custom headers?
如果您查看 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>,
有an implementation of TryFrom<&'a str>
for HeaderName
,所以可以使用字符串字面量:
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
});
希望这可能有所帮助。
我需要使用 Reqwest 库向带有 cookie 的网站发出 GET 请求。我想出了如何发送 GET 请求:
let response = reqwest::get("http://example.com")?;
如何发送相同的请求但添加一些自定义 headers?
要求 0.10
从 crate's documentation 开始,我们看到:
For a single request, you can use the
get
shortcut method.
This function creates a new internal
Client
on each call, and so should not be used if making many requests. Create aClient
instead.
Client
有一个 request
方法,它指出:
Returns a
RequestBuilder
, which will allow setting headers and request body before sending.
RequestBuilder
有一个 header
method。这可以用作:
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?;
How do I add custom headers?
如果您查看 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>,
有an implementation of TryFrom<&'a str>
for HeaderName
,所以可以使用字符串字面量:
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
});
希望这可能有所帮助。