Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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에게 강제되는 지침)

Expand All @@ -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` 중 하나로 확정
Expand Down Expand Up @@ -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 코드 직접 읽을 때
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 지정 (초)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# TLS 임퍼소네이션 — curl_cffi

> TLS 핑거프린트(JA3/JA4) 기반 WAF를 우회하는 핵심 방법.
> TLS 핑거프린트(JA3/JA4) 기반 WAF에 대응하는 핵심 방법.
> 일반 curl/requests는 OpenSSL 핑거프린트라 즉시 차단되지만,
> curl_cffi는 실제 브라우저(Chrome/Safari/Firefox)의 TLS 핑거프린트를 복제한다.

Expand Down Expand Up @@ -152,7 +152,7 @@ resp = requests.get(
)
```

WAF 벤더들이 아직 HTTP/3 핑거프린트를 적극 활용하지 않아 우회 효과가 높다.
WAF 벤더들이 아직 HTTP/3 핑거프린트를 적극 활용하지 않아 대응 효과가 높다.

## 대안 라이브러리

Expand All @@ -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 |
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# X/Twitter 접근 전략

> WebFetch는 402로 차단됨. 아래 방법으로 우회한다. 모두 API 키/인증 불필요.
> WebFetch는 402로 차단됨. 아래 방법으로 접근한다. 모두 API 키/인증 불필요.

## 검색 (트윗 발견)

Expand Down