我需要使用Reqwest库向一个带有cookie的网站发出GET请求。我知道如何发送GET请求:
let response = reqwest::get("http://example.com")?;如何发送相同的请求,但添加一些自定义标头?
发布于 2017-12-21 02:10:42
Reqwest 0.10
从crate's documentation开始,我们可以看到:
对于单个请求,可以使用
get快捷方式。
此函数在每次调用时创建一个新的内部
Client,因此如果发出许多请求,则不应使用此函数。改为创建一个Client。
Client有一个request方法,它声明:
返回一个
RequestBuilder,允许在发送前设置头部和请求正文。
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?;如何添加自定义头部?
如果您查看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(())
}发布于 2019-09-04 16:04:51
在版本为~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
});希望这能有所帮助。
https://stackoverflow.com/questions/47911513
复制相似问题