#http-request #cookie-jar #cookies #store #jar #http

reqwest_cookie_store

A simple crate providing an implementation of the reqwest::cookie::CookieStore trait for cookie_store::CookieStore

13 releases (7 breaking)

0.8.0 May 31, 2024
0.7.0 Mar 23, 2024
0.6.0 Jun 17, 2023
0.5.0 Nov 5, 2022
0.1.5 May 12, 2021

#22 in HTTP client

Download history 2087/week @ 2024-04-05 2258/week @ 2024-04-12 2615/week @ 2024-04-19 2758/week @ 2024-04-26 2037/week @ 2024-05-03 1932/week @ 2024-05-10 2021/week @ 2024-05-17 1754/week @ 2024-05-24 2975/week @ 2024-05-31 2473/week @ 2024-06-07 2370/week @ 2024-06-14 2484/week @ 2024-06-21 2662/week @ 2024-06-28 2591/week @ 2024-07-05 2913/week @ 2024-07-12 2241/week @ 2024-07-19

10,846 downloads per month
Used in 29 crates (23 directly)

MIT/Apache

15KB
147 lines

Documentation

reqwest_cookie_store provides implementations of reqwest::cookie::CookieStore for 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.

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

Dependencies

~5–15MB
~227K SLoC