kareemheshaam/capture2tls
GitHub: kareemheshaam/capture2tls
将代理工具捕获的原始 HTTP 请求转换为保留 TLS 指纹和 header 顺序的 Python 自动化代码,用于应对反机器人检测。
Stars: 0 | Forks: 0
# capture2tls
将 **Charles Proxy**(或任何代理工具)中捕获的原始 HTTP 请求转换为可直接运行的 **tls_client / curl_cffi** session 的 Python 代码。
与普通的 `requests` 不同,这些 session 会保留 header 顺序和 TLS 指纹——这在应对反机器人系统时非常重要。生成的代码会相应地使用 `session.header_order` 和 `session.force_http1`。如果你只需要普通的 `requests`,只需将 `session` 替换为 `requests.Session()` 并删除这两行即可。
## 支持特性
- **HTTP/1.1** 格式(`GET /path HTTP/1.1` + `Host:` header)
- **HTTP/2** 伪 header 格式(`:method`, `:authority`, `:path`, `:scheme`)
- Cookie header → 拆分为单独的 `cookies` 字典
- JSON body → `json=` 参数
- 纯文本 / form body → `data=` 参数
- 自动移除 `Content-Length` 和 `Host`
## 用法
1. 从 Charles Proxy 中复制原始请求。
2. 将其粘贴到 `capture2tls.py` 的 `raw_request` 变量中。
3. 运行:
```
python capture2tls.py
```
输出将打印到标准输出——你可以直接将其粘贴到你的自动化脚本中。
**输入示例 (HTTP/1.1):**
```
GET /api/v1/products?page=1&limit=20 HTTP/1.1
Host: example.com
Accept: application/json
User-Agent: Mozilla/5.0 (Android 11; Mobile)
Authorization: Bearer YOUR_TOKEN_HERE
Cookie: session_id=abc123; pref=dark
```
**生成输出:**
```
url = 'https://example.com/api/v1/products?page=1&limit=20'
cookies = {'session_id': 'abc123', 'pref': 'dark'}
headers = {'Accept': 'application/json', 'User-Agent': 'Mozilla/5.0 (Android 11; Mobile)', 'Authorization': 'Bearer YOUR_TOKEN_HERE'}
session.header_order = list(headers.keys())
if 'Cookie' in headers: del headers['Cookie']
session.force_http1 = True
response = session.get(url, headers=headers, cookies=cookies)
```
**输入示例 (HTTP/2):**
```
:method: POST
:authority: api.example.com
:scheme: https
:path: /v2/auth/token
content-type: application/json
user-agent: okhttp/4.11.0
{"grant_type": "password", "username": "user", "password": "pass"}
```
## 编程式调用
```
from capture2tls import parse_and_generate
raw = """
POST /api/login HTTP/1.1
Host: example.com
Content-Type: application/json
{"username": "user", "password": "pass"}
"""
print(parse_and_generate(raw))
```
## Session 设置(tls_client 示例)
```
import tls_client
session = tls_client.Session(
client_identifier="okhttp4_android_13",
random_tls_extension_order=True
)
# 在此粘贴生成的代码
url = 'https://example.com/api/v1/products'
...
response = session.get(url, headers=headers, cookies=cookies)
print(response.text)
```
## 依赖
无——仅使用标准库。*生成的*代码需要 `tls_client` 或 `curl_cffi`(如果你不需要 TLS 指纹,则可以使用普通的 `requests`)。
## 许可证
MIT
标签:Python, Radare2, SOC Prime, TLS指纹, 代码生成, 开发工具, 无后门, 渗透测试工具, 网络抓包, 网络调试, 自动化, 逆向工具