ser*_*off 9 http http-headers rust reqwest
我需要使用Reqwest库向具有cookie的网站发出GET请求。我想出了如何发送GET请求的方法:
let response = reqwest::get("http://example.com")?;
Run Code Online (Sandbox Code Playgroud)
如何发送相同的请求,但添加一些自定义标头?
从板条箱的文档开始,我们看到:
对于单个请求,可以使用
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, "foo")
.send()?;
Run Code Online (Sandbox Code Playgroud)
如何添加自定义标题?
如果查看的签名header,您将看到它接受通用类型:
pub fn header<K, V>(self, key: K, value: V) -> RequestBuilder
where
HeaderName: HttpTryFrom<K>,
HeaderValue: HttpTryFrom<V>,
Run Code Online (Sandbox Code Playgroud)
有for 的实现HttpTryFrom<&'a str>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(())
}
Run Code Online (Sandbox Code Playgroud)
在版本为 ~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
});
Run Code Online (Sandbox Code Playgroud)
希望这可能会有所帮助。
| 归档时间: |
|
| 查看次数: |
2782 次 |
| 最近记录: |