如何使用Reqwest设置请求标头?

问题描述 投票:4回答:1

我需要使用Reqwest库向带有cookie的网站发出GET请求。我想出了如何发送GET请求:

let response = reqwest::get("http://example.com")?;

如何发送相同的请求但添加一些自定义标头?

http http-headers rust reqwest
1个回答
8
投票

Reqwest 0.9

crate's documentation开始,我们看到:

对于单个请求,您可以使用get快捷方法。

get's documentation说:

此函数在每次调用时都会创建一个新的内部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, "foo")
    .send()?;

如何添加自定义标头?

如果你查看header的签名,你会发现它接受泛型类型:

pub fn header<K, V>(self, key: K, value: V) -> RequestBuilder
where
    HeaderName: HttpTryFrom<K>,
    HeaderValue: HttpTryFrom<V>, 

an implementation of HttpTryFrom<&'a str> for HeaderName,所以你可以使用字符串文字:

use reqwest; // 0.9.17

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()?;

    Ok(())
}

0
投票

在reqwest客户端发送Cookie,版本为~0.9.19

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
           });

希望这可能有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.