From d4473b852c415cada104e82d9959d9428c44bb77 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Fri, 17 Oct 2025 03:41:45 -0400 Subject: [PATCH] something is wrong with websocket --- .../create_listen_websocket.rs | 62 +++++++++++-------- 1 file changed, 36 insertions(+), 26 deletions(-) diff --git a/crates/api_clients/grok_client/src/requests/listen_websocket/create_listen_websocket.rs b/crates/api_clients/grok_client/src/requests/listen_websocket/create_listen_websocket.rs index 14a1a40e1c..ee25cdb6ac 100644 --- a/crates/api_clients/grok_client/src/requests/listen_websocket/create_listen_websocket.rs +++ b/crates/api_clients/grok_client/src/requests/listen_websocket/create_listen_websocket.rs @@ -1,5 +1,6 @@ use std::ops::Deref; use log::info; +use tokio::io::AsyncReadExt; use wreq::Client; use wreq::header::{ACCEPT, ACCEPT_ENCODING, ACCEPT_LANGUAGE, CACHE_CONTROL, CONNECTION, COOKIE, ORIGIN, PRAGMA, UPGRADE, USER_AGENT}; use wreq::ws::message::Message; @@ -9,6 +10,7 @@ use crate::error::grok_error::GrokError; use crate::error::grok_generic_api_error::GrokGenericApiError; const WEBSOCKET_URL: &str = "wss://grok.com/ws/imagine/listen"; +//const WEBSOCKET_URL: &str = "https://grok.com/ws/imagine/listen"; pub struct CreateListenWebsocketArgs<'a> { pub cookies: &'a str, @@ -18,34 +20,38 @@ pub async fn create_listen_websocket(args: CreateListenWebsocketArgs<'_>) -> Res println!("Building client..."); info!("Building client..."); - //let client = Client::builder() - // .emulation(Emulation::Firefox139) - // .build() - // .map_err(|err| GrokClientError::WreqClientError(err))?; + let client = Client::builder() + .emulation(Emulation::Firefox139) + .build() + .map_err(|err| GrokClientError::WreqClientError(err))?; + + let cookies = args.cookies.to_string(); + println!("Cookies: {}", cookies); println!("Configuring client..."); info!("Configuring client..."); - let builder = wreq::websocket(WEBSOCKET_URL) - .header(ACCEPT, "*/*") - .header(USER_AGENT, "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:144.0) Gecko/20100101 Firefox/144.0") - //.header(ACCEPT_LANGUAGE, "en-US,en;q=0.5") - //.header(ACCEPT_ENCODING, "gzip, deflate, br, zstd") - //.header("Sec-WebSocket-Version", "13") - .header(ORIGIN, "https://grok.com") - //.header("Sec-WebSocket-Extensions", "permessage-deflate") - //.header("Sec-WebSocket-Key", "BhBXbFSG6/1xcZVq4ySxcg==") // TODO - //.header("Sec-GPC", "1") - //.header(CONNECTION, "keep-alive, Upgrade") - //.header(COOKIE, args.cookies.to_string()) - //.header("Sec-Fetch-Dest", "empty") - //.header("Sec-Fetch-Mode", "websocket") - //.header("Sec-Fetch-Site", "same-origin") - .header(PRAGMA, "no-cache") - .header(CACHE_CONTROL, "no-cache") - .read_buffer_size(1024 * 1024); - //.header(UPGRADE, "websocket") - //.map_err(|err| GrokClientError::WreqClientError(err))?; + let builder = client.websocket(WEBSOCKET_URL) + //.force_http2() + .header("Accept", "*/*") + .header("Accept-Language", "en-US,en;q=0.5") + .header("Accept-Encoding", "gzip, deflate, br, zstd") + .header("Sec-WebSocket-Version", "13") + .header("Origin", "https://grok.com") + .header("Sec-WebSocket-Extensions", "permessage-deflate") + .header("Sec-WebSocket-Key", "BhBXbFSG6/1xcZVq4ySxcg==") // TODO + .header("Sec-GPC", "1") + .header("Connection", "keep-alive, Upgrade") + .header("Cookie", cookies) + .header("Sec-Fetch-Dest", "empty") + .header("Sec-Fetch-Mode", "websocket") + .header("Sec-Fetch-Site", "same-origin") + .header("Pragma", "no-cache") + .header("Cache-Control", "no-cache") + .header("Upgrade", "websocket") + .header("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:144.0) Gecko/20100101 Firefox/144.0") + .read_buffer_size(1024 * 1024) + .write_buffer_size(1024 * 1024); println!("Sending..."); info!("Sending..."); @@ -54,9 +60,12 @@ pub async fn create_listen_websocket(args: CreateListenWebsocketArgs<'_>) -> Res .await .map_err(|err| GrokClientError::WreqClientError(err))?; + println!("Response version: {:?}", response.version()); + let status = response.status(); println!("Status: {}", status); + //for (k, v) in response.headers().iter() { // println!("Header: {}: {:?}", k, v); //} @@ -72,6 +81,7 @@ pub async fn create_listen_websocket(args: CreateListenWebsocketArgs<'_>) -> Res println!("Into websocket..."); info!("Into websocket..."); + /* // ApiGeneric(WreqError(wreq::Error { kind: Upgrade, source: "unexpected status code: 403 Forbidden" })) let mut websocket = response.into_websocket() .await @@ -82,7 +92,7 @@ pub async fn create_listen_websocket(args: CreateListenWebsocketArgs<'_>) -> Res } let message = r#" - {"type":"conversation.item.create","timestamp":1760675883072,"item":{"type":"message","content":[{"requestId":"3cedf20e-f51c-db5d-a124-bcec05feedf1","text":"A pirannah","type":"input_text","properties":{"section_count":0,"is_kids_mode":false,"enable_nsfw":true,"skip_upsampler":false,"is_initial":false}}]}} + {"type":"conversation.item.create","timestamp":1760673207293,"item":{"type":"message","content":[{"requestId":"3cedf20e-f51f-da5d-a124-ccec05faedf1","text":"A pirannah","type":"input_text","properties":{"section_count":0,"is_kids_mode":false,"enable_nsfw":true,"skip_upsampler":false,"is_initial":false}}]}} "#.trim().to_string(); let wire_message = Message::text(message); @@ -122,7 +132,7 @@ pub async fn create_listen_websocket(args: CreateListenWebsocketArgs<'_>) -> Res tokio::time::sleep(std::time::Duration::from_millis(15_000)).await; } } - + */ Ok(()) }