From feda3314c31b2f536af2f8ca80d30cc708d42c28 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Sat, 18 Oct 2025 00:31:44 -0400 Subject: [PATCH] notes --- .../src/requests/listen_websocket/cookies.rs | 5 ++++ .../create_listen_websocket_new.rs | 23 +++++++++++-------- .../src/requests/listen_websocket/mod.rs | 1 + 3 files changed, 20 insertions(+), 9 deletions(-) create mode 100644 crates/api_clients/grok_client/src/requests/listen_websocket/cookies.rs diff --git a/crates/api_clients/grok_client/src/requests/listen_websocket/cookies.rs b/crates/api_clients/grok_client/src/requests/listen_websocket/cookies.rs new file mode 100644 index 0000000000..a4f65fae1b --- /dev/null +++ b/crates/api_clients/grok_client/src/requests/listen_websocket/cookies.rs @@ -0,0 +1,5 @@ +// Logged-in session with cf_clearance cookie: +pub const SESSION_COOKIES_WITH_CF_CLEARANCE : &str = "_ga=GA1.1.1232202746.1760710013; i18nextLng=en; sso=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzZXNzaW9uX2lkIjoiOGU3MDFiNzctOTdkNC00ZjM0LWExOTctOWFmMDU1MzY3NDAwIn0.-a6x0InxbGzfTVfUlrdzxskxCnvMDI8lC90z4wHeGIk; sso-rw=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzZXNzaW9uX2lkIjoiOGU3MDFiNzctOTdkNC00ZjM0LWExOTctOWFmMDU1MzY3NDAwIn0.-a6x0InxbGzfTVfUlrdzxskxCnvMDI8lC90z4wHeGIk; stblid=b3331fc1-45d7-466b-83df-67427c0b2367; mp_ea93da913ddb66b6372b89d97b1029ac_mixpanel=%7B%22distinct_id%22%3A%2285980643-ffab-4984-a3de-59a608c47d7f%22%2C%22%24device_id%22%3A%2279ce237a-a0f3-4913-bf4b-519ac8a98263%22%2C%22%24initial_referrer%22%3A%22%24direct%22%2C%22%24initial_referring_domain%22%3A%22%24direct%22%2C%22__mps%22%3A%7B%7D%2C%22__mpso%22%3A%7B%7D%2C%22__mpus%22%3A%7B%7D%2C%22__mpa%22%3A%7B%7D%2C%22__mpu%22%3A%7B%7D%2C%22__mpr%22%3A%5B%5D%2C%22__mpap%22%3A%5B%5D%2C%22%24user_id%22%3A%2285980643-ffab-4984-a3de-59a608c47d7f%22%7D; cf_clearance=e7.LXFbmc.U81rZIqxuBfBe88yuBZMXEP.zwxNkbOxw-1760724394-1.2.1.1-JMHrapBGxcZriUw852.NCqwFRpZJFvoYxq.mV0jDpKCkiHBZwpdv09XJi6eFLJUYJJ6UDZ3c1eAsucVYLdWN.SvA9M6qzujj8nY4ym03PxQlMEd2OmXJogtDDJbPhA5AZEGxA39_6QQlvaBIUBnYPALYrTl9XJN_V4q3n4BXtpoBzrIJURMIn0mW3esUCGv0NukuVQrkrNtMgqT5SUmTGi0idaBYoR_2_wv4P09lsug; _ga_8FEWB057YH=GS2.1.s1760724394$o3$g1$t1760724401$j53$l0$h0"; + +// Logged-in session without cf_clearance cookie: +pub const SESSION_COOKIES_WITHOUT_CF_CLEARANCE : &str = "_ga=GA1.1.1232202746.1760710013; i18nextLng=en; sso=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzZXNzaW9uX2lkIjoiOGU3MDFiNzctOTdkNC00ZjM0LWExOTctOWFmMDU1MzY3NDAwIn0.-a6x0InxbGzfTVfUlrdzxskxCnvMDI8lC90z4wHeGIk; sso-rw=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzZXNzaW9uX2lkIjoiOGU3MDFiNzctOTdkNC00ZjM0LWExOTctOWFmMDU1MzY3NDAwIn0.-a6x0InxbGzfTVfUlrdzxskxCnvMDI8lC90z4wHeGIk; stblid=b3331fc1-45d7-466b-83df-67427c0b2367; mp_ea93da913ddb66b6372b89d97b1029ac_mixpanel=%7B%22distinct_id%22%3A%2285980643-ffab-4984-a3de-59a608c47d7f%22%2C%22%24device_id%22%3A%2279ce237a-a0f3-4913-bf4b-519ac8a98263%22%2C%22%24initial_referrer%22%3A%22%24direct%22%2C%22%24initial_referring_domain%22%3A%22%24direct%22%2C%22__mps%22%3A%7B%7D%2C%22__mpso%22%3A%7B%7D%2C%22__mpus%22%3A%7B%7D%2C%22__mpa%22%3A%7B%7D%2C%22__mpu%22%3A%7B%7D%2C%22__mpr%22%3A%5B%5D%2C%22__mpap%22%3A%5B%5D%2C%22%24user_id%22%3A%2285980643-ffab-4984-a3de-59a608c47d7f%22%7D; _ga_8FEWB057YH=GS2.1.s1760724394$o3$g1$t1760724401$j53$l0$h0"; diff --git a/crates/api_clients/grok_client/src/requests/listen_websocket/create_listen_websocket_new.rs b/crates/api_clients/grok_client/src/requests/listen_websocket/create_listen_websocket_new.rs index 0e78d75e82..5e55015d58 100644 --- a/crates/api_clients/grok_client/src/requests/listen_websocket/create_listen_websocket_new.rs +++ b/crates/api_clients/grok_client/src/requests/listen_websocket/create_listen_websocket_new.rs @@ -1,6 +1,7 @@ -use crate::client::browser_user_agents::{FIREFOX_139_MAC_USER_AGENT, FIREFOX_143_MAC_USER_AGENT}; +use crate::client::browser_user_agents::FIREFOX_143_MAC_USER_AGENT; use crate::error::grok_client_error::GrokClientError; use crate::error::grok_error::GrokError; +use crate::requests::listen_websocket::cookies::SESSION_COOKIES_WITHOUT_CF_CLEARANCE; use std::ops::Deref; use std::time::Duration; use tokio::io::AsyncReadExt; @@ -11,6 +12,17 @@ use wreq_util::Emulation; const WEBSOCKET_URL: &str = "wss://grok.com/ws/imagine/listen"; pub async fn create_listen_websocket_new() -> Result<(), GrokError> { + /* + Wreq Firefox vs Real Firefox Private Mode: + + - wreq has two extensions real firefox doesn't: + - "session_ticket (35) (IANA)" + - "psk_key_exchange_modes (45) (IANA)" + - wreq has "psk_key_exchange_mode": "AQ==", whereas real firefox private mode is null + - wreq has "session_ticket_supported": true, whereas real firefox private mode is false + + Wreq Firefox is IDENTICAL to Real Firefox Normal Mode (non-private) mode. - So why is it not working!? + */ let client = Client::builder() .emulation(Emulation::Firefox143) .connection_verbose(true) @@ -21,14 +33,9 @@ pub async fn create_listen_websocket_new() -> Result<(), GrokError> { //.http1_only() // NB: Not needed - websockets are sent over HTTP/1.1 without this configuration //.cookie_store(true) - let cookies = "_ga=GA1.1.1232202746.1760710013; i18nextLng=en; sso=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzZXNzaW9uX2lkIjoiOGU3MDFiNzctOTdkNC00ZjM0LWExOTctOWFmMDU1MzY3NDAwIn0.-a6x0InxbGzfTVfUlrdzxskxCnvMDI8lC90z4wHeGIk; sso-rw=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzZXNzaW9uX2lkIjoiOGU3MDFiNzctOTdkNC00ZjM0LWExOTctOWFmMDU1MzY3NDAwIn0.-a6x0InxbGzfTVfUlrdzxskxCnvMDI8lC90z4wHeGIk; stblid=b3331fc1-45d7-466b-83df-67427c0b2367; mp_ea93da913ddb66b6372b89d97b1029ac_mixpanel=%7B%22distinct_id%22%3A%2285980643-ffab-4984-a3de-59a608c47d7f%22%2C%22%24device_id%22%3A%2279ce237a-a0f3-4913-bf4b-519ac8a98263%22%2C%22%24initial_referrer%22%3A%22%24direct%22%2C%22%24initial_referring_domain%22%3A%22%24direct%22%2C%22__mps%22%3A%7B%7D%2C%22__mpso%22%3A%7B%7D%2C%22__mpus%22%3A%7B%7D%2C%22__mpa%22%3A%7B%7D%2C%22__mpu%22%3A%7B%7D%2C%22__mpr%22%3A%5B%5D%2C%22__mpap%22%3A%5B%5D%2C%22%24user_id%22%3A%2285980643-ffab-4984-a3de-59a608c47d7f%22%7D; cf_clearance=e7.LXFbmc.U81rZIqxuBfBe88yuBZMXEP.zwxNkbOxw-1760724394-1.2.1.1-JMHrapBGxcZriUw852.NCqwFRpZJFvoYxq.mV0jDpKCkiHBZwpdv09XJi6eFLJUYJJ6UDZ3c1eAsucVYLdWN.SvA9M6qzujj8nY4ym03PxQlMEd2OmXJogtDDJbPhA5AZEGxA39_6QQlvaBIUBnYPALYrTl9XJN_V4q3n4BXtpoBzrIJURMIn0mW3esUCGv0NukuVQrkrNtMgqT5SUmTGi0idaBYoR_2_wv4P09lsug; _ga_8FEWB057YH=GS2.1.s1760724394$o3$g1$t1760724401$j53$l0$h0"; - - // Without cf_clearance cookie: - let cookies = "_ga=GA1.1.1232202746.1760710013; i18nextLng=en; sso=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzZXNzaW9uX2lkIjoiOGU3MDFiNzctOTdkNC00ZjM0LWExOTctOWFmMDU1MzY3NDAwIn0.-a6x0InxbGzfTVfUlrdzxskxCnvMDI8lC90z4wHeGIk; sso-rw=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzZXNzaW9uX2lkIjoiOGU3MDFiNzctOTdkNC00ZjM0LWExOTctOWFmMDU1MzY3NDAwIn0.-a6x0InxbGzfTVfUlrdzxskxCnvMDI8lC90z4wHeGIk; stblid=b3331fc1-45d7-466b-83df-67427c0b2367; mp_ea93da913ddb66b6372b89d97b1029ac_mixpanel=%7B%22distinct_id%22%3A%2285980643-ffab-4984-a3de-59a608c47d7f%22%2C%22%24device_id%22%3A%2279ce237a-a0f3-4913-bf4b-519ac8a98263%22%2C%22%24initial_referrer%22%3A%22%24direct%22%2C%22%24initial_referring_domain%22%3A%22%24direct%22%2C%22__mps%22%3A%7B%7D%2C%22__mpso%22%3A%7B%7D%2C%22__mpus%22%3A%7B%7D%2C%22__mpa%22%3A%7B%7D%2C%22__mpu%22%3A%7B%7D%2C%22__mpr%22%3A%5B%5D%2C%22__mpap%22%3A%5B%5D%2C%22%24user_id%22%3A%2285980643-ffab-4984-a3de-59a608c47d7f%22%7D; _ga_8FEWB057YH=GS2.1.s1760724394$o3$g1$t1760724401$j53$l0$h0"; - let builder = client.websocket(WEBSOCKET_URL) .header("Accept", "*/*") - .header("Cookie", cookies) + .header("Cookie", SESSION_COOKIES_WITHOUT_CF_CLEARANCE) .header("Host", "grok.com") .header(USER_AGENT, FIREFOX_143_MAC_USER_AGENT); @@ -52,7 +59,6 @@ pub async fn create_listen_websocket_new() -> Result<(), GrokError> { Ok(()) } - #[cfg(test)] mod tests { use super::*; @@ -70,4 +76,3 @@ mod tests { Ok(()) } } - diff --git a/crates/api_clients/grok_client/src/requests/listen_websocket/mod.rs b/crates/api_clients/grok_client/src/requests/listen_websocket/mod.rs index ce39f9c681..da7791c9bd 100644 --- a/crates/api_clients/grok_client/src/requests/listen_websocket/mod.rs +++ b/crates/api_clients/grok_client/src/requests/listen_websocket/mod.rs @@ -2,3 +2,4 @@ mod create_listen_websocket; mod create_listen_websocket_new; mod create_listen_websocket_raw_non_websocket; mod tls_check; +mod cookies;