-
Notifications
You must be signed in to change notification settings - Fork 0
Home
元气码农少女酱 edited this page Aug 20, 2026
·
4 revisions
一个 gRPC 分布式 HTTP 请求代理。 把「发 HTTP 请求」变成一个可以跨机器调度的服务: 调用方说要抓哪个网址,服务端用合适的适配器去抓——普通 HTTP、带 TLS 指纹伪装的、 或者真起一个浏览器把 JS 跑完再取 DOM。
from ipclick import Downloader
with Downloader() as d:
resp = d.get("https://example.com")
print(resp.status_code, len(resp.content))
print(resp.trace.node_id, resp.trace.adapter, resp.trace.attempts)pip install ipclick # 17 个包,只带默认适配器
ipclick init # 生成 ipclick.toml 与 .env(600 权限)
ipclick run -w # 起服务 + Web 管理端控制台会打出 Web 管理端地址与登录信息。另开一个终端:
ipclick fetch https://example.com --json逐步说明见 快速开始。
发请求
| 用 Python 发请求 | SDK 用法 |
| 用命令行 / 在脚本里发请求 | 命令行 |
| 在网页上点一下就发一次 | Web 管理端 → 试一试 |
| 照着现成例子改 | 示例集 |
抓不到想要的内容
| 页面内容要 JS 跑完才有 | 浏览器渲染 |
| 目标站点认 TLS 指纹 | 默认适配器 curl_cffi 自带伪装,见适配器
|
| 要 HTTP/2 或 HTTP/3 | 适配器 → niquests |
| 需要在页面里点按钮、填表单 | 在页面里执行 JS |
| 要下大文件 / 断点续传 | SDK 用法 → 流式与续传 |
要多台机器 / 换出口 IP
| 从多台机器的出口 IP 发请求 | 集群 |
| 走代理换 IP | SDK 用法 → 代理 |
| 指定某个请求打到哪台机器 | 集群 → 点名目标节点 |
线上运维
| 刚才那个请求为什么 403 | 链路记录 |
| 不想把对方站点打挂 | 按 host 限流 |
| 服务端不能被当成内网跳板 | SSRF 防护 |
| 吞吐上不去 | 性能与容量 |
| 出问题了,从哪查 | 故障排查 |
| 某个配置项是干嘛的 | 配置体系 |
其它
| 想在网页上把可选组件装上 | Web 管理端 → 组件 |
| 让 AI 代理会用 IPClick | 命令行 → 给 AI 用 |
| 想改这个项目 | 开发与发布 |
| 类型与签名 | API 参考 |
这些规矩贯穿整个代码库,读代码或排查问题前知道它们会省很多事:
-
配置错误必须报错,绝不静默降级。
mode = "cluster"却没配节点 → 直接失败, 而不是悄悄退回单机。静默降级的问题会在你最需要它工作的时候才暴露。 -
只有瞬时传输故障才返回
status_code == -1。 参数写错、鉴权失败、依赖没装 一律抛异常。把用法错误伪装成网络故障会让人查错方向。 - 不做无谓的重试。 参数错误、脚本语法错、服务端能力缺失,重试多少次都是同样的 结果,只会拖慢失败反馈。见故障排查。
-
机密不进配置文件。 令牌、密码、集群密钥走
.env或环境变量;写进ipclick.toml仍然生效,但启动时会点名提醒。见安全。 - 可观测性数据绝不反压业务。 链路记录写盘跟不上就丢弃并计数, 丢了要能看见——静默丢弃比丢弃更糟。