首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Reqwest设置请求头?

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

Stack Overflow用户
提问于 2017-12-21 01:36:09
回答 2查看 12.6K关注 0票数 16

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

代码语言:javascript
复制
let response = reqwest::get("http://example.com")?;

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-21 02:10:42

Reqwest 0.10

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

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

get's documentation声明:

此函数在每次调用时创建一个新的内部Client,因此如果发出许多请求,则不应使用此函数。改为创建一个Client

Client有一个request方法,它声明:

返回一个RequestBuilder,允许在发送前设置头部和请求正文。

RequestBuilder有一个header method。这可以用作:

代码语言:javascript
复制
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的签名,您将看到它接受泛型类型:

代码语言:javascript
复制
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,所以你可以使用一个字符串:

代码语言:javascript
复制
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(())
}
票数 32
EN

Stack Overflow用户

发布于 2019-09-04 16:04:51

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

代码语言:javascript
复制
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
           });

希望这能有所帮助。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47911513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档