75 lines
2.3 KiB
Markdown
75 lines
2.3 KiB
Markdown
[![Documentation](https://docs.rs/reqwest_cookie_store/badge.svg)](https://docs.rs/reqwest_cookie_store)
|
|
|
|
`reqwest_cookie_store` provides implementations of `reqwest::cookie::CookieStore` for [cookie_store](https://crates.io/crates/cookie_store).
|
|
|
|
# Example
|
|
The following example demonstrates loading a `cookie_store::CookieStore` (re-exported in this crate) from disk, and using it within a
|
|
`CookieStoreMutex`. It then makes a series of requests, examining and modifying the contents
|
|
of the underlying `cookie_store::CookieStore` in between.
|
|
|
|
```rust
|
|
// Load an existing set of cookies, serialized as json
|
|
let cookie_store = {
|
|
let file = std::fs::File::open("cookies.json")
|
|
.map(std::io::BufReader::new)
|
|
.unwrap();
|
|
// use re-exported version of `CookieStore` for crate compatibility
|
|
reqwest_cookie_store::CookieStore::load_json(file).unwrap()
|
|
};
|
|
let cookie_store = reqwest_cookie_store::CookieStoreMutex::new(cookie_store);
|
|
let cookie_store = std::sync::Arc::new(cookie_store);
|
|
{
|
|
// Examine initial contents
|
|
println!("initial load");
|
|
let store = cookie_store.lock().unwrap();
|
|
for c in store.iter_any() {
|
|
println!("{:?}", c);
|
|
}
|
|
}
|
|
|
|
// Build a `reqwest` Client, providing the deserialized store
|
|
let client = reqwest::Client::builder()
|
|
.cookie_provider(std::sync::Arc::clone(&cookie_store))
|
|
.build()
|
|
.unwrap();
|
|
|
|
// Make a sample request
|
|
client.get("https://google.com").send().await.unwrap();
|
|
{
|
|
// Examine the contents of the store.
|
|
println!("after google.com GET");
|
|
let store = cookie_store.lock().unwrap();
|
|
for c in store.iter_any() {
|
|
println!("{:?}", c);
|
|
}
|
|
}
|
|
|
|
// Make another request from another domain
|
|
println!("GET from msn");
|
|
client.get("https://msn.com").send().await.unwrap();
|
|
{
|
|
// Examine the contents of the store.
|
|
println!("after msn.com GET");
|
|
let mut store = cookie_store.lock().unwrap();
|
|
for c in store.iter_any() {
|
|
println!("{:?}", c);
|
|
}
|
|
// Clear the store, and examine again
|
|
store.clear();
|
|
println!("after clear");
|
|
for c in store.iter_any() {
|
|
println!("{:?}", c);
|
|
}
|
|
}
|
|
|
|
// Get some new cookies
|
|
client.get("https://google.com").send().await.unwrap();
|
|
{
|
|
// Write store back to disk
|
|
let mut writer = std::fs::File::create("cookies2.json")
|
|
.map(std::io::BufWriter::new)
|
|
.unwrap();
|
|
let store = cookie_store.lock().unwrap();
|
|
store.save_json(&mut writer).unwrap();
|
|
}
|
|
```
|