Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Bypass Cloudflare protection by routing requests through FlareSolverr’s browser API, handling challenges and returning page content, cookies, and headers.
Bypass Cloudflare protection by routing requests through FlareSolverr’s browser API, handling challenges and returning page content, cookies, and headers.
This item's current download entry is known to bounce back to a listing or homepage instead of returning a package file.
Use the source page and any available docs to guide the install because the item currently does not return a direct package file.
I tried to install a skill package from Yavira, but the item currently does not return a direct package file. Inspect the source page and any extracted docs, then tell me what you can confirm and any manual steps still required.
I tried to upgrade a skill package from Yavira, but the item currently does not return a direct package file. Compare the source page and any extracted docs with my current installation, then summarize what changed and what manual follow-up I still need.
Use FlareSolverr to bypass Cloudflare protection when direct curl requests fail with 403 or Cloudflare challenge pages.
Run FlareSolverr (Docker recommended): docker run -d --name flaresolverr -p 8191:8191 ghcr.io/flaresolverr/flaresolverr:latest Set the environment variable: export FLARESOLVERR_URL="http://localhost:8191" Verify: curl -s "$FLARESOLVERR_URL/health" | jq '.' # Expected: {"status":"ok","version":"3.x.x"}
Direct curl fails with 403 Forbidden Cloudflare challenge page appears (JS challenge, captcha, "Checking your browser") Bot detection blocks automated requests Rate limiting or anti-scraping measures
Try direct curl first (it's faster and simpler) If blocked: Use FlareSolverr to get cookies/user-agent Reuse session for subsequent requests (optional, for performance)
curl -X POST "$FLARESOLVERR_URL/v1" \ -H "Content-Type: application/json" \ -d '{ "cmd": "request.get", "url": "https://example.com/protected-page", "maxTimeout": 60000 }' | jq '.'
{ "status": "ok", "message": "Challenge solved!", "solution": { "url": "https://example.com/protected-page", "status": 200, "headers": {}, "response": "<html>...</html>", "cookies": [ { "name": "cf_clearance", "value": "...", "domain": ".example.com" } ], "userAgent": "Mozilla/5.0 ..." }, "startTimestamp": 1234567890, "endTimestamp": 1234567895, "version": "3.3.2" }
curl -s -X POST "$FLARESOLVERR_URL/v1" \ -H "Content-Type: application/json" \ -d '{ "cmd": "request.get", "url": "https://example.com/protected-page" }' | jq -r '.solution.response'
curl -s -X POST "$FLARESOLVERR_URL/v1" \ -H "Content-Type: application/json" \ -d '{ "cmd": "request.get", "url": "https://example.com" }' | jq -r '.solution.cookies[] | "\(.name)=\(.value)"'
Sessions allow reusing browser context (cookies, user-agent) for multiple requests, improving performance.
curl -s -X POST "$FLARESOLVERR_URL/v1" \ -H "Content-Type: application/json" \ -d '{"cmd": "sessions.create"}' | jq -r '.session'
curl -s -X POST "$FLARESOLVERR_URL/v1" \ -H "Content-Type: application/json" \ -d '{ "cmd": "request.get", "url": "https://example.com/page1", "session": "SESSION_ID" }' | jq -r '.solution.response'
curl -s -X POST "$FLARESOLVERR_URL/v1" \ -H "Content-Type: application/json" \ -d '{"cmd": "sessions.list"}' | jq '.sessions'
curl -s -X POST "$FLARESOLVERR_URL/v1" \ -H "Content-Type: application/json" \ -d '{ "cmd": "sessions.destroy", "session": "SESSION_ID" }'
curl -s -X POST "$FLARESOLVERR_URL/v1" \ -H "Content-Type: application/json" \ -d '{ "cmd": "request.post", "url": "https://example.com/api/endpoint", "postData": "key1=value1&key2=value2", "maxTimeout": 60000 }' | jq '.' For JSON POST data: curl -s -X POST "$FLARESOLVERR_URL/v1" \ -H "Content-Type: application/json" \ -d '{ "cmd": "request.post", "url": "https://example.com/api/endpoint", "postData": "{\"key\":\"value\"}", "headers": { "Content-Type": "application/json" } }' | jq '.'
curl -s -X POST "$FLARESOLVERR_URL/v1" \ -H "Content-Type: application/json" \ -d '{ "cmd": "request.get", "url": "https://example.com", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" }' | jq '.'
curl -s -X POST "$FLARESOLVERR_URL/v1" \ -H "Content-Type: application/json" \ -d '{ "cmd": "request.get", "url": "https://example.com", "headers": { "Accept-Language": "en-US,en;q=0.9", "Referer": "https://google.com" } }' | jq '.'
curl -s -X POST "$FLARESOLVERR_URL/v1" \ -H "Content-Type: application/json" \ -d '{ "cmd": "request.get", "url": "https://example.com", "proxy": { "url": "http://proxy.example.com:8080" } }' | jq '.'
curl -s -X POST "$FLARESOLVERR_URL/v1" \ -H "Content-Type: application/json" \ -d '{ "cmd": "request.get", "url": "https://example.com/file.pdf", "download": true }' | jq -r '.solution.response' | base64 -d > file.pdf
"status": "error": Request failed (check message field) "status": "timeout": maxTimeout exceeded (increase timeout) "status": "captcha": Manual captcha required (rare, usually auto-solved)
curl -s -X POST "$FLARESOLVERR_URL/v1" \ -H "Content-Type: application/json" \ -d '{"cmd": "request.get", "url": "https://example.com"}' | \ jq -r '.status'
# Step 1: Fetch page through FlareSolverr RESPONSE=$(curl -s -X POST "$FLARESOLVERR_URL/v1" \ -H "Content-Type: application/json" \ -d '{ "cmd": "request.get", "url": "https://example.com/protected-page" }') # Step 2: Check if successful STATUS=$(echo "$RESPONSE" | jq -r '.status') if [ "$STATUS" != "ok" ]; then echo "Failed: $(echo "$RESPONSE" | jq -r '.message')" exit 1 fi # Step 3: Extract and parse HTML echo "$RESPONSE" | jq -r '.solution.response'
# Create session SESSION=$(curl -s -X POST "$FLARESOLVERR_URL/v1" \ -H "Content-Type: application/json" \ -d '{"cmd": "sessions.create"}' | jq -r '.session') # Page 1 curl -s -X POST "$FLARESOLVERR_URL/v1" \ -H "Content-Type: application/json" \ -d "{\"cmd\": \"request.get\", \"url\": \"https://example.com/page1\", \"session\": \"$SESSION\"}" | \ jq -r '.solution.response' # Page 2 (reuses cookies from page 1) curl -s -X POST "$FLARESOLVERR_URL/v1" \ -H "Content-Type: application/json" \ -d "{\"cmd\": \"request.get\", \"url\": \"https://example.com/page2\", \"session\": \"$SESSION\"}" | \ jq -r '.solution.response' # Cleanup curl -s -X POST "$FLARESOLVERR_URL/v1" \ -H "Content-Type: application/json" \ -d "{\"cmd\": \"sessions.destroy\", \"session\": \"$SESSION\"}"
curl -s "$FLARESOLVERR_URL/health" | jq '.'
Use sessions for multiple requests to same domain (reuses cookies/context) Increase maxTimeout for slow sites (default: 60000ms) Fallback to direct curl when possible (FlareSolverr is slower due to browser overhead) Destroy sessions when done to free resources
Slower than direct curl (launches headless browser) Resource intensive (limit concurrent requests) May not solve all captchas (most Cloudflare challenges work) HTML only in response (no client-side JS execution after fetch)
Always try direct curl first Use sessions for multi-page workflows Set appropriate maxTimeout (default 60s, increase for slow sites) Clean up sessions when done Handle errors gracefully (check status field) Rate limit your requests (don't overwhelm FlareSolverr or target site)
Code helpers, APIs, CLIs, browser automation, testing, and developer operations.
Largest current source with strong distribution and engagement signals.