diff --git a/plugins/omo/skills/ultimate-browsing/references/insane-search/README.md b/plugins/omo/skills/ultimate-browsing/references/insane-search/README.md index b4a2faf..fc0d920 100644 --- a/plugins/omo/skills/ultimate-browsing/references/insane-search/README.md +++ b/plugins/omo/skills/ultimate-browsing/references/insane-search/README.md @@ -6,7 +6,7 @@ > Deep-dives in this folder: TLS impersonation, Playwright routing, fallback, metadata, Jina, cache/archive, RSS, JSON/public APIs, Twitter, Naver, media. -> URL 접근이 차단될 때, **사이트 무관한** 우회 전략을 자동 선택한다. +> URL 접근이 차단될 때, **사이트 무관한** 대체 접근 전략을 자동 선택한다. ## 하네스 규칙 (Claude에게 강제되는 지침) @@ -32,7 +32,7 @@ **R6 — 실패 선언은 전수 시도 후에만**: 격자(URL 변환 × TLS impersonate × Referer × Playwright fallback)를 **모두** 돌린 뒤에만 "뚫을 수 없음" 결론. CLI의 `max_attempts` 기본 12가 이를 보장. 단, R7 조건(WAF 조기 감지)이 성립하면 engine 격자는 계속 돌되, Claude가 **병렬로** MCP 정찰 루트를 시도할 수 있다. 빠른 쪽이 이긴다. -**R7 — WAF 조기 감지 시 API-first 병행 분기** (분기 결정은 자동이지만 사용자가 결과에서 확인 가능 — 어떤 우회 경로로 성공/실패했는지 결과 metadata에 명시): +**R7 — WAF 조기 감지 시 API-first 병행 분기** (분기 결정은 자동이지만 사용자가 결과에서 확인 가능 — 어떤 접근 경로로 성공/실패했는지 결과 metadata에 명시): 발동 조건 (AND): 1. engine 실행 초기에 첫 2~3회 attempt가 모두 `verdict=challenge` 2. `profile_used`가 `akamai_bot_manager`, `cloudflare_turnstile`, `datadome_probable`, `perimeterx_human`, `f5_big_ip`, `aws_waf` 중 하나로 확정 @@ -302,7 +302,7 @@ yt-dlp --write-sub --write-auto-sub --sub-lang "en,ko" --skip-download -o "/tmp/ | [`json-api.md`](json-api.md) | Reddit/Wikipedia/HN/npm/PyPI 등 **URL 변형만으로** JSON을 주는 사이트 | Reddit `/json` suffix + Mobile UA, HN Firebase, Algolia Search, Wikipedia REST, npm/PyPI Registry API | | [`public-api.md`](public-api.md) | Bluesky/Mastodon/arXiv/Stack Overflow/CrossRef/GitHub/OpenLibrary/Wayback 공식 API 사용 시 | 인증 없이 쓰는 공식 공개 REST/AT/Atom API 엔드포인트, 요청 형식, 공통 파라미터 | | [`twitter.md`](twitter.md) | X/Twitter 접근 — 프로필 타임라인, 특정 트윗, 키워드 검색 | `syndication.twitter.com` 타임라인, oEmbed 개별 트윗, 검색은 WebSearch로 URL 확보 후 oEmbed | -| [`naver.md`](naver.md) | 네이버 블로그·뉴스·증권·검색 접근 | 서비스별 우회(블로그는 `m.blog.naver.com` 변환, 증권은 비공식 JSON, 검색은 `search.naver.com`), 한글 검색 쿼리 패턴 | +| [`naver.md`](naver.md) | 네이버 블로그·뉴스·증권·검색 접근 | 서비스별 대체 접근(블로그는 `m.blog.naver.com` 변환, 증권은 비공식 JSON, 검색은 `search.naver.com`), 한글 검색 쿼리 패턴 | | [`media.md`](media.md) | YouTube/Vimeo/Twitch/TikTok/SoundCloud 등 미디어 메타·자막·오디오 필요 시 | `yt-dlp --dump-json` 기반 1,858개 사이트 커버, 자막 다운로드(`--write-sub`), 포맷 선택, 라이브/팟캐스트 | ### D. Engine 코드 직접 읽을 때 diff --git a/plugins/omo/skills/ultimate-browsing/references/insane-search/jina.md b/plugins/omo/skills/ultimate-browsing/references/insane-search/jina.md index 180e05b..1081979 100644 --- a/plugins/omo/skills/ultimate-browsing/references/insane-search/jina.md +++ b/plugins/omo/skills/ultimate-browsing/references/insane-search/jina.md @@ -69,7 +69,7 @@ curl -H "X-With-Links: true" "https://r.jina.ai/{URL}" ### 캐시 제어 ```bash -# 캐시 우회 (실시간 필요 시) +# 캐시 건너뛰기 (실시간 필요 시) curl -H "X-No-Cache: true" "https://r.jina.ai/{URL}" # 캐시 TTL 지정 (초) diff --git a/plugins/omo/skills/ultimate-browsing/references/insane-search/playwright.md b/plugins/omo/skills/ultimate-browsing/references/insane-search/playwright.md index d8e4510..42f3489 100644 --- a/plugins/omo/skills/ultimate-browsing/references/insane-search/playwright.md +++ b/plugins/omo/skills/ultimate-browsing/references/insane-search/playwright.md @@ -116,7 +116,7 @@ const ctx = await chromium.launchPersistentContext(profileDir, { | `needs_real_tls_stack` + `needs_js_exec` | Approach 2 (real_chrome) | Akamai Bot Manager | | `needs_js_exec` only | Approach 1 (MCP) | Cloudflare Turnstile | | `needs_real_tls_stack` only | Approach 2 (real_chrome) | 일부 DataDome 설정 | -| 둘 다 없음 | curl 체인에서 해결. Playwright 안 씀 | F5 BIG-IP (TLS만 우회 필요) | +| 둘 다 없음 | curl 체인에서 해결. Playwright 안 씀 | F5 BIG-IP (TLS만 대응 필요) | `device_class="mobile"`이 지정되면 real_chrome → mobile 변종으로 swap. diff --git a/plugins/omo/skills/ultimate-browsing/references/insane-search/tls-impersonate.md b/plugins/omo/skills/ultimate-browsing/references/insane-search/tls-impersonate.md index 3a1db50..9dddfc8 100644 --- a/plugins/omo/skills/ultimate-browsing/references/insane-search/tls-impersonate.md +++ b/plugins/omo/skills/ultimate-browsing/references/insane-search/tls-impersonate.md @@ -1,6 +1,6 @@ # TLS 임퍼소네이션 — curl_cffi -> TLS 핑거프린트(JA3/JA4) 기반 WAF를 우회하는 핵심 방법. +> TLS 핑거프린트(JA3/JA4) 기반 WAF에 대응하는 핵심 방법. > 일반 curl/requests는 OpenSSL 핑거프린트라 즉시 차단되지만, > curl_cffi는 실제 브라우저(Chrome/Safari/Firefox)의 TLS 핑거프린트를 복제한다. @@ -152,7 +152,7 @@ resp = requests.get( ) ``` -WAF 벤더들이 아직 HTTP/3 핑거프린트를 적극 활용하지 않아 우회 효과가 높다. +WAF 벤더들이 아직 HTTP/3 핑거프린트를 적극 활용하지 않아 대응 효과가 높다. ## 대안 라이브러리 @@ -175,9 +175,9 @@ resp = client.get("https://example.com") | 방어 수단 | curl_cffi | 대응 | |-----------|-----------|------| -| TLS/JA3 핑거프린트 | 우회 가능 | 핵심 기능 | -| HTTP/2 SETTINGS 핑거프린트 | 우회 가능 | impersonate에 포함 | -| HTTP/3 QUIC 핑거프린트 | 우회 가능 (v0.15+) | 신규 | +| TLS/JA3 핑거프린트 | 대응 가능 | 핵심 기능 | +| HTTP/2 SETTINGS 핑거프린트 | 대응 가능 | impersonate에 포함 | +| HTTP/3 QUIC 핑거프린트 | 대응 가능 (v0.15+) | 신규 | | JS 챌린지 (Turnstile 등) | **불가** | → nodriver 또는 Playwright | | CAPTCHA | **불가** | → 2captcha/CapSolver | | IP 평판 (데이터센터) | **불가** | → 프록시/VPN | diff --git a/plugins/omo/skills/ultimate-browsing/references/insane-search/twitter.md b/plugins/omo/skills/ultimate-browsing/references/insane-search/twitter.md index 06f2845..12e1dd0 100644 --- a/plugins/omo/skills/ultimate-browsing/references/insane-search/twitter.md +++ b/plugins/omo/skills/ultimate-browsing/references/insane-search/twitter.md @@ -1,6 +1,6 @@ # X/Twitter 접근 전략 -> WebFetch는 402로 차단됨. 아래 방법으로 우회한다. 모두 API 키/인증 불필요. +> WebFetch는 402로 차단됨. 아래 방법으로 접근한다. 모두 API 키/인증 불필요. ## 검색 (트윗 발견)