295 lines
7 KiB
Markdown
295 lines
7 KiB
Markdown
# Proxy Support
|
|
|
|
Proxy configuration for geo-testing, privacy, and corporate environments.
|
|
|
|
**Related**: [commands.md](commands.md) for full function reference, [SKILL.md](../SKILL.md) for quick start.
|
|
|
|
## Contents
|
|
|
|
- [Basic Proxy Configuration](#basic-proxy-configuration)
|
|
- [Authenticated Proxy](#authenticated-proxy)
|
|
- [Common Use Cases](#common-use-cases)
|
|
- [Proxy Types](#proxy-types)
|
|
- [Verifying Proxy Connection](#verifying-proxy-connection)
|
|
- [Troubleshooting](#troubleshooting)
|
|
- [Best Practices](#best-practices)
|
|
|
|
## Basic Proxy Configuration
|
|
|
|
Set proxy when opening a session:
|
|
|
|
```bash
|
|
SESSION=$(infsh app run agent-browser --function open --session new --input '{
|
|
"url": "https://example.com",
|
|
"proxy_url": "http://proxy.example.com:8080"
|
|
}' | jq -r '.session_id')
|
|
```
|
|
|
|
All traffic for this session routes through the proxy.
|
|
|
|
## Authenticated Proxy
|
|
|
|
For proxies requiring username/password:
|
|
|
|
```bash
|
|
SESSION=$(infsh app run agent-browser --function open --session new --input '{
|
|
"url": "https://example.com",
|
|
"proxy_url": "http://proxy.example.com:8080",
|
|
"proxy_username": "myuser",
|
|
"proxy_password": "mypassword"
|
|
}' | jq -r '.session_id')
|
|
```
|
|
|
|
## Common Use Cases
|
|
|
|
### Geo-Location Testing
|
|
|
|
Test how your site appears from different regions:
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
# Test from multiple regions
|
|
|
|
PROXIES=(
|
|
"us|http://us-proxy.example.com:8080"
|
|
"eu|http://eu-proxy.example.com:8080"
|
|
"asia|http://asia-proxy.example.com:8080"
|
|
)
|
|
|
|
for entry in "${PROXIES[@]}"; do
|
|
REGION="${entry%%|*}"
|
|
PROXY="${entry##*|}"
|
|
|
|
echo "Testing from: $REGION"
|
|
|
|
SESSION=$(infsh app run agent-browser --function open --session new --input '{
|
|
"url": "https://mysite.com",
|
|
"proxy_url": "'"$PROXY"'"
|
|
}' | jq -r '.session_id')
|
|
|
|
# Take screenshot
|
|
infsh app run agent-browser --function screenshot --session $SESSION --input '{
|
|
"full_page": true
|
|
}' > "${REGION}-screenshot.json"
|
|
|
|
# Get page content
|
|
RESULT=$(infsh app run agent-browser --function snapshot --session $SESSION --input '{}')
|
|
echo $RESULT | jq '.elements_text' > "${REGION}-elements.txt"
|
|
|
|
infsh app run agent-browser --function close --session $SESSION --input '{}'
|
|
done
|
|
|
|
echo "Geo-testing complete"
|
|
```
|
|
|
|
### Rate Limit Avoidance
|
|
|
|
Rotate proxies for web scraping:
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
# Rotate through proxy list
|
|
|
|
PROXIES=(
|
|
"http://proxy1.example.com:8080"
|
|
"http://proxy2.example.com:8080"
|
|
"http://proxy3.example.com:8080"
|
|
)
|
|
|
|
URLS=(
|
|
"https://site.com/page1"
|
|
"https://site.com/page2"
|
|
"https://site.com/page3"
|
|
)
|
|
|
|
for i in "${!URLS[@]}"; do
|
|
# Rotate proxy
|
|
PROXY_INDEX=$((i % ${#PROXIES[@]}))
|
|
PROXY="${PROXIES[$PROXY_INDEX]}"
|
|
URL="${URLS[$i]}"
|
|
|
|
echo "Fetching $URL via proxy $((PROXY_INDEX + 1))"
|
|
|
|
SESSION=$(infsh app run agent-browser --function open --session new --input '{
|
|
"url": "'"$URL"'",
|
|
"proxy_url": "'"$PROXY"'"
|
|
}' | jq -r '.session_id')
|
|
|
|
# Extract data
|
|
RESULT=$(infsh app run agent-browser --function execute --session $SESSION --input '{
|
|
"code": "document.body.innerText"
|
|
}')
|
|
echo $RESULT | jq -r '.result' > "page-$i.txt"
|
|
|
|
infsh app run agent-browser --function close --session $SESSION --input '{}'
|
|
|
|
# Polite delay
|
|
sleep 1
|
|
done
|
|
```
|
|
|
|
### Corporate Network Access
|
|
|
|
Access sites through corporate proxy:
|
|
|
|
```bash
|
|
# Use corporate proxy for external sites
|
|
SESSION=$(infsh app run agent-browser --function open --session new --input '{
|
|
"url": "https://external-vendor.com",
|
|
"proxy_url": "http://corpproxy.company.com:8080",
|
|
"proxy_username": "'"$CORP_USER"'",
|
|
"proxy_password": "'"$CORP_PASS"'"
|
|
}' | jq -r '.session_id')
|
|
```
|
|
|
|
### Privacy and Anonymity
|
|
|
|
Route through privacy-focused proxy:
|
|
|
|
```bash
|
|
SESSION=$(infsh app run agent-browser --function open --session new --input '{
|
|
"url": "https://whatismyip.com",
|
|
"proxy_url": "socks5://privacy-proxy.example.com:1080"
|
|
}' | jq -r '.session_id')
|
|
```
|
|
|
|
## Proxy Types
|
|
|
|
### HTTP/HTTPS Proxy
|
|
|
|
```json
|
|
{"proxy_url": "http://proxy.example.com:8080"}
|
|
{"proxy_url": "https://proxy.example.com:8080"}
|
|
```
|
|
|
|
### SOCKS5 Proxy
|
|
|
|
```json
|
|
{"proxy_url": "socks5://proxy.example.com:1080"}
|
|
```
|
|
|
|
### With Authentication
|
|
|
|
```json
|
|
{
|
|
"proxy_url": "http://proxy.example.com:8080",
|
|
"proxy_username": "user",
|
|
"proxy_password": "pass"
|
|
}
|
|
```
|
|
|
|
## Verifying Proxy Connection
|
|
|
|
Check that traffic routes through proxy:
|
|
|
|
```bash
|
|
SESSION=$(infsh app run agent-browser --function open --session new --input '{
|
|
"url": "https://httpbin.org/ip",
|
|
"proxy_url": "http://proxy.example.com:8080"
|
|
}' | jq -r '.session_id')
|
|
|
|
# Get the IP shown
|
|
RESULT=$(infsh app run agent-browser --function execute --session $SESSION --input '{
|
|
"code": "document.body.innerText"
|
|
}')
|
|
echo "IP via proxy: $(echo $RESULT | jq -r '.result')"
|
|
|
|
infsh app run agent-browser --function close --session $SESSION --input '{}'
|
|
```
|
|
|
|
The IP should be the proxy's IP, not your real IP.
|
|
|
|
## Troubleshooting
|
|
|
|
### Connection Failed
|
|
|
|
```
|
|
Error: Failed to open URL: net::ERR_PROXY_CONNECTION_FAILED
|
|
```
|
|
|
|
**Solutions:**
|
|
1. Verify proxy URL is correct
|
|
2. Check proxy is running and accessible
|
|
3. Confirm port is correct
|
|
4. Test proxy with curl: `curl -x http://proxy:8080 https://example.com`
|
|
|
|
### Authentication Failed
|
|
|
|
```
|
|
Error: 407 Proxy Authentication Required
|
|
```
|
|
|
|
**Solutions:**
|
|
1. Verify username/password are correct
|
|
2. Check if proxy requires different auth method
|
|
3. Ensure credentials don't contain special characters that need escaping
|
|
|
|
### SSL Errors
|
|
|
|
Some proxies perform SSL inspection. If you see certificate errors:
|
|
|
|
```bash
|
|
# The browser should handle most SSL proxies automatically
|
|
# If issues persist, verify proxy SSL certificate is valid
|
|
```
|
|
|
|
### Slow Performance
|
|
|
|
**Solutions:**
|
|
1. Choose proxy closer to target site
|
|
2. Use faster proxy provider
|
|
3. Reduce number of requests per session
|
|
|
|
## Best Practices
|
|
|
|
### 1. Use Environment Variables
|
|
|
|
```bash
|
|
# Good: Credentials in env vars
|
|
'{"proxy_url": "'"$PROXY_URL"'", "proxy_username": "'"$PROXY_USER"'"}'
|
|
|
|
# Bad: Hardcoded
|
|
'{"proxy_url": "http://user:pass@proxy.com:8080"}'
|
|
```
|
|
|
|
### 2. Test Proxy Before Automation
|
|
|
|
```bash
|
|
# Verify proxy works
|
|
curl -x "$PROXY_URL" https://httpbin.org/ip
|
|
```
|
|
|
|
### 3. Handle Proxy Failures
|
|
|
|
```bash
|
|
# Retry with different proxy on failure
|
|
for PROXY in "${PROXIES[@]}"; do
|
|
SESSION=$(infsh app run agent-browser --function open --session new --input '{
|
|
"url": "'"$URL"'",
|
|
"proxy_url": "'"$PROXY"'"
|
|
}' 2>&1)
|
|
|
|
if echo "$SESSION" | jq -e '.session_id' > /dev/null 2>&1; then
|
|
SESSION_ID=$(echo $SESSION | jq -r '.session_id')
|
|
break
|
|
fi
|
|
echo "Proxy $PROXY failed, trying next..."
|
|
done
|
|
```
|
|
|
|
### 4. Respect Rate Limits
|
|
|
|
Even with proxies, be a good citizen:
|
|
|
|
```bash
|
|
# Add delays between requests
|
|
'{"action": "wait", "wait_ms": 1000}'
|
|
```
|
|
|
|
### 5. Log Proxy Usage
|
|
|
|
For debugging, log which proxy was used:
|
|
|
|
```bash
|
|
echo "$(date): Using proxy $PROXY for $URL" >> proxy.log
|
|
```
|