web-unblocker
Bypasses anti-bot protections using Oxylabs Web Unblocker, an AI-powered proxy that handles fingerprinting, JavaScript rendering, and retries automatically. Use when the user needs to scrape protected websites, bypass CAPTCHAs, access blocked content, or when regular proxies fail
Install
npx skills add https://github.com/oxylabs/agent-skills/tree/main/skills/web-unblocker
claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install oxylabs-agent-skills@llmmart
git clone https://github.com/oxylabs/agent-skills.git
The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole oxylabs/agent-skills collection as a plugin from our marketplace. Git is the plain clone.
Skill manifest
Oxylabs Web Unblocker
AI-powered proxy solution that automatically manages fingerprinting, headers, retries, and JavaScript rendering.
Endpoint
https://unblock.oxylabs.io:60000
Authentication
HTTP Basic Auth via proxy credentials:
curl -k -x "https://unblock.oxylabs.io:60000" \
-U "$OXYLABS_USERNAME:$OXYLABS_PASSWORD" \
"https://example.com"
Quick Start
Basic request:
curl -k -x "https://unblock.oxylabs.io:60000" \
-U "$OXYLABS_USERNAME:$OXYLABS_PASSWORD" \
"https://ip.oxylabs.io/headers"
With JavaScript rendering:
curl -k -x "https://unblock.oxylabs.io:60000" \
-U "$OXYLABS_USERNAME:$OXYLABS_PASSWORD" \
-H "x-oxylabs-render: html" \
"https://example.com/spa-page"
Headers
| Header | Description |
|---|---|
x-oxylabs-render |
html for rendered HTML, png for raw PNG bytes; empty value disables automatic forced rendering |
X-Oxylabs-Session-Id |
Reuse same IP across requests (any random string) |
X-Oxylabs-Geo-Location |
Target country, city/state, ZIP/postcode, or coordinates |
x-oxylabs-force-headers: 1 |
Enable custom header passthrough |
x-oxylabs-force-cookies: 1 |
Enable custom cookie passthrough |
X-Oxylabs-Successful-Status-Codes |
Define custom success codes to prevent retries |
x-oxylabs-browser-instructions |
JSON-escaped browser actions; requires x-oxylabs-render: html |
Session Persistence
Reuse the same IP across multiple requests:
curl -k -x "https://unblock.oxylabs.io:60000" \
-U "$OXYLABS_USERNAME:$OXYLABS_PASSWORD" \
-H "X-Oxylabs-Session-Id: my-session-123" \
"https://example.com/page1"
Geo-Location Targeting
curl -k -x "https://unblock.oxylabs.io:60000" \
-U "$OXYLABS_USERNAME:$OXYLABS_PASSWORD" \
-H "X-Oxylabs-Geo-Location: Germany" \
"https://example.com"
Use values such as Germany, 90210, California,United States, New York,New York,United States, or lat: 40.7128, lng: -74.0060, rad: 50.
Use normal HTTP methods and request bodies through the proxy; Web Unblocker supports both GET and POST.
When to Use Web Unblocker vs Regular Proxies
| Scenario | Use |
|---|---|
| Sites with anti-bot protection | Web Unblocker |
| CAPTCHAs, fingerprint detection | Web Unblocker |
| JavaScript-heavy SPAs | Web Unblocker with x-oxylabs-render: html |
| Simple requests, no protection | Regular Proxies |
| High volume, price sensitive | Regular Proxies |
Key Guidelines
- Always use
-kflag (or disable SSL verification) - the proxy uses its own certificates - Add
x-oxylabs-render: htmlif experiencing empty content or low success rates; set client timeouts near 180 seconds for rendered requests - Check
X-Oxylabs-Final-Urlin response headers when redirects matter - Avoid adding custom unblocking headers that may interfere with the AI
- Browser instruction header values must be JSON-escaped and compact; pair them with
x-oxylabs-render: html
For code examples in Python, Node.js, PHP, Go, Java, and C#, see examples.md.
Files (agent-skills)
-
examples.md 4.7 KB
# Web Unblocker Code Examples ## cURL **Basic request:** ```bash curl -k -x "https://unblock.oxylabs.io:60000" \ -U "$OXYLABS_USERNAME:$OXYLABS_PASSWORD" \ "https://example.com" ``` **With JavaScript rendering:** ```bash curl -k -x "https://unblock.oxylabs.io:60000" \ -U "$OXYLABS_USERNAME:$OXYLABS_PASSWORD" \ -H "x-oxylabs-render: html" \ "https://example.com/dynamic-page" ``` **With geo-location and session:** ```bash curl -k -x "https://unblock.oxylabs.io:60000" \ -U "$OXYLABS_USERNAME:$OXYLABS_PASSWORD" \ -H "X-Oxylabs-Geo-Location: United States" \ -H "X-Oxylabs-Session-Id: session123" \ "https://example.com" ``` **Screenshot as PNG:** ```bash curl -k -x "https://unblock.oxylabs.io:60000" \ -U "$OXYLABS_USERNAME:$OXYLABS_PASSWORD" \ -H "x-oxylabs-render: png" \ "https://example.com" -o screenshot.png ``` ## Python ```python import requests import os proxies = { "http": f"http://{os.environ['OXYLABS_USERNAME']}:{os.environ['OXYLABS_PASSWORD']}@unblock.oxylabs.io:60000", "https": f"https://{os.environ['OXYLABS_USERNAME']}:{os.environ['OXYLABS_PASSWORD']}@unblock.oxylabs.io:60000" } # Basic request response = requests.get( "https://example.com", proxies=proxies, verify=False # Required for Web Unblocker ) print(response.text) ``` **With headers:** ```python import requests import os proxies = { "https": f"https://{os.environ['OXYLABS_USERNAME']}:{os.environ['OXYLABS_PASSWORD']}@unblock.oxylabs.io:60000" } headers = { "x-oxylabs-render": "html", "X-Oxylabs-Geo-Location": "Germany" } response = requests.get( "https://example.com", proxies=proxies, headers=headers, verify=False ) print(response.text) ``` ## Node.js ```javascript const fetch = require("node-fetch"); const HttpsProxyAgent = require("https-proxy-agent"); const username = process.env.OXYLABS_USERNAME; const password = process.env.OXYLABS_PASSWORD; const agent = new HttpsProxyAgent( `https://${username}:${password}@unblock.oxylabs.io:60000` ); // Disable TLS verification process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; async function fetchPage() { const response = await fetch("https://example.com", { agent, headers: { "x-oxylabs-render": "html" } }); const html = await response.text(); console.log(html); } fetchPage(); ``` ## PHP ```php <?php $username = getenv('OXYLABS_USERNAME'); $password = getenv('OXYLABS_PASSWORD'); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://example.com"); curl_setopt($ch, CURLOPT_PROXY, "https://unblock.oxylabs.io:60000"); curl_setopt($ch, CURLOPT_PROXYUSERPWD, "$username:$password"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "x-oxylabs-render: html" ]); $response = curl_exec($ch); curl_close($ch); echo $response; ?> ``` ## Go ```go package main import ( "fmt" "io" "net/http" "net/url" "os" "crypto/tls" ) func main() { username := os.Getenv("OXYLABS_USERNAME") password := os.Getenv("OXYLABS_PASSWORD") proxyURL, _ := url.Parse(fmt.Sprintf( "https://%s:%s@unblock.oxylabs.io:60000", username, password, )) transport := &http.Transport{ Proxy: http.ProxyURL(proxyURL), TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, } client := &http.Client{Transport: transport} req, _ := http.NewRequest("GET", "https://example.com", nil) req.Header.Set("x-oxylabs-render", "html") resp, _ := client.Do(req) defer resp.Body.Close() body, _ := io.ReadAll(resp.Body) fmt.Println(string(body)) } ``` ## Java ```java import java.net.*; import java.io.*; public class WebUnblocker { public static void main(String[] args) throws Exception { String username = System.getenv("OXYLABS_USERNAME"); String password = System.getenv("OXYLABS_PASSWORD"); Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("unblock.oxylabs.io", 60000)); Authenticator.setDefault(new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password.toCharArray()); } }); URL url = new URL("https://example.com"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(proxy); conn.setRequestProperty("x-oxylabs-render", "html"); BufferedReader reader = new BufferedReader( new InputStreamReader(conn.getInputStream())); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } reader.close(); } } ``` -
SKILL.md 3.4 KB
--- name: web-unblocker description: Bypasses anti-bot protections using Oxylabs Web Unblocker, an AI-powered proxy that handles fingerprinting, JavaScript rendering, and retries automatically. Use when the user needs to scrape protected websites, bypass CAPTCHAs, access blocked content, or when regular proxies fail due to anti-bot measures. --- # Oxylabs Web Unblocker AI-powered proxy solution that automatically manages fingerprinting, headers, retries, and JavaScript rendering. ## Endpoint ``` https://unblock.oxylabs.io:60000 ``` ## Authentication HTTP Basic Auth via proxy credentials: ```bash curl -k -x "https://unblock.oxylabs.io:60000" \ -U "$OXYLABS_USERNAME:$OXYLABS_PASSWORD" \ "https://example.com" ``` ## Quick Start **Basic request:** ```bash curl -k -x "https://unblock.oxylabs.io:60000" \ -U "$OXYLABS_USERNAME:$OXYLABS_PASSWORD" \ "https://ip.oxylabs.io/headers" ``` **With JavaScript rendering:** ```bash curl -k -x "https://unblock.oxylabs.io:60000" \ -U "$OXYLABS_USERNAME:$OXYLABS_PASSWORD" \ -H "x-oxylabs-render: html" \ "https://example.com/spa-page" ``` ## Headers | Header | Description | |--------|-------------| | `x-oxylabs-render` | `html` for rendered HTML, `png` for raw PNG bytes; empty value disables automatic forced rendering | | `X-Oxylabs-Session-Id` | Reuse same IP across requests (any random string) | | `X-Oxylabs-Geo-Location` | Target country, city/state, ZIP/postcode, or coordinates | | `x-oxylabs-force-headers: 1` | Enable custom header passthrough | | `x-oxylabs-force-cookies: 1` | Enable custom cookie passthrough | | `X-Oxylabs-Successful-Status-Codes` | Define custom success codes to prevent retries | | `x-oxylabs-browser-instructions` | JSON-escaped browser actions; requires `x-oxylabs-render: html` | ## Session Persistence Reuse the same IP across multiple requests: ```bash curl -k -x "https://unblock.oxylabs.io:60000" \ -U "$OXYLABS_USERNAME:$OXYLABS_PASSWORD" \ -H "X-Oxylabs-Session-Id: my-session-123" \ "https://example.com/page1" ``` ## Geo-Location Targeting ```bash curl -k -x "https://unblock.oxylabs.io:60000" \ -U "$OXYLABS_USERNAME:$OXYLABS_PASSWORD" \ -H "X-Oxylabs-Geo-Location: Germany" \ "https://example.com" ``` Use values such as `Germany`, `90210`, `California,United States`, `New York,New York,United States`, or `lat: 40.7128, lng: -74.0060, rad: 50`. Use normal HTTP methods and request bodies through the proxy; Web Unblocker supports both GET and POST. ## When to Use Web Unblocker vs Regular Proxies | Scenario | Use | |----------|-----| | Sites with anti-bot protection | Web Unblocker | | CAPTCHAs, fingerprint detection | Web Unblocker | | JavaScript-heavy SPAs | Web Unblocker with `x-oxylabs-render: html` | | Simple requests, no protection | Regular Proxies | | High volume, price sensitive | Regular Proxies | ## Key Guidelines - Always use `-k` flag (or disable SSL verification) - the proxy uses its own certificates - Add `x-oxylabs-render: html` if experiencing empty content or low success rates; set client timeouts near 180 seconds for rendered requests - Check `X-Oxylabs-Final-Url` in response headers when redirects matter - Avoid adding custom unblocking headers that may interfere with the AI - Browser instruction header values must be JSON-escaped and compact; pair them with `x-oxylabs-render: html` For code examples in Python, Node.js, PHP, Go, Java, and C#, see [examples.md](examples.md).
Comments (0)
Sign in to join the conversation.
Reviews (0)
No reviews yet.
No comments yet.