use eoka::{Browser, Result, StealthConfig};
#[tokio::main]
async fn main() -> Result<()> {
tracing_subscriber::fmt()
.with_env_filter(
tracing_subscriber::EnvFilter::from_default_env()
.add_directive("eoka=info".parse().unwrap()),
)
.init();
println!("=== Eoka Request Capture Example ===\n");
let config = StealthConfig {
headless: true,
..Default::default()
};
println!("Launching browser...");
let browser = Browser::launch_with_config(config).await?;
let page = browser.new_page("about:blank").await?;
println!("Enabling request capture...");
page.enable_request_capture().await?;
println!("\nNavigating to httpbin.org...\n");
page.goto("https://httpbin.org/get?foo=bar&baz=123").await?;
page.wait(2000).await;
println!("Fetching JSON endpoint...\n");
page.goto("https://httpbin.org/json").await?;
page.wait(1000).await;
let content = page.text().await?;
println!("Response content (first 500 chars):");
println!("{}\n", &content[..content.len().min(500)]);
println!("Making a fetch request via JavaScript...");
let result: serde_json::Value = page
.evaluate(
r#"
(async () => {
const response = await fetch('https://httpbin.org/post', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ message: 'Hello from eoka!' })
});
return await response.json();
})()
"#,
)
.await?;
println!("POST response:");
println!("{}\n", serde_json::to_string_pretty(&result)?);
page.disable_request_capture().await?;
println!("Closing browser...");
browser.close().await?;
println!("\n=== Done ===");
Ok(())
}