WebSocket 中继
Scraping API 可以通过代理网络中继双向 WebSocket 连接。所有 WS 子协议均透明中继 — Socket.IO、SignalR、Centrifugo、GraphQL-WS、原生 WebSocket 等。端点
连接流程
发送连接消息(10 秒内)
发送一条 JSON 消息,指定目标 URL 和您的 API 密钥。您有 10 秒时间发送此消息,否则连接将以关闭代码
1008 断开。| Field | Type | Required | Default | Description |
|---|---|---|---|---|
apiKey | string | Yes | — | 您的 API 密钥(也接受 key) |
url | string | Yes | — | 目标 WebSocket URL(wss://... 或 ws://...) |
headers | object | No | {} | WS 升级请求的自定义请求头 |
cookies | object | No | {} | 随 WS 升级请求发送的 Cookie |
geo | string | No | — | 代理节点选择的国家过滤(例如 US,DE) |
agent | string | No | — | 通过标识固定到特定代理节点(例如 de1 或 de1,at5) |
idle_timeout | float | No | 0 | 等待目标消息的超时时间(秒)。0 = 不超时 |
接收连接确认
网关选择代理节点,代理节点连接到目标 WebSocket,然后网关响应:
| Field | Description |
|---|---|
type | 始终为 "connected" |
status | WS 升级的 HTTP 状态码(101) |
node_id | 处理连接的代理节点 |
错误响应
如果出现问题,网关会发送:- API 密钥无效或缺失(关闭代码
1008) - 超出速率限制(关闭代码
1008) - 10 秒内未收到连接消息(关闭代码
1008) - 目标连接失败
- 代理节点不可用
示例:Python
示例:JavaScript
支持的子协议
所有子协议均透明中继 — 无需特殊配置:- Raw WebSocket (text/binary)
- Socket.IO (engine.io transport)
- SignalR (JSON +
\x1edelimiter) - Centrifugo (JSON-RPC)
- GraphQL-WS subscriptions
AMQP 消费者 (SSE)
通过代理网络从 RabbitMQ 代理流式传输消息,以 Server-Sent Events 形式交付。代理节点连接到消息代理,创建临时自动删除队列,将其绑定到指定的交换机,并将消息流式传回。端点
请求体
X-API-Key 请求头提供,而不是使用 apiKey 请求体字段。
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
apiKey | string | Yes | — | 您的 API 密钥(或使用 X-API-Key 请求头) |
host | string | Yes | — | AMQP 消息代理主机名 |
port | int | No | 5672 | 消息代理端口(SSL 使用 5671) |
virtual_host | string | No | / | AMQP 虚拟主机 |
username | string | No | "" | 消息代理用户名 |
password | string | No | "" | 消息代理密码 |
exchange | string | No | "" | 要绑定的交换机 |
routing_key | string | No | # | 路由键模式(# = 所有消息) |
queue_prefix | string | No | scrape | 自动删除队列名称的前缀(例如 scrape_de1_4821) |
ssl | bool | No | false | 使用 AMQPS (TLS) 连接 |
heartbeat | int | No | 60 | AMQP 心跳间隔(秒) |
geo | string | No | — | 代理节点选择的国家过滤 |
agent | string | No | — | 通过标识固定到特定代理节点 |
SSE 事件
connected — 代理节点已连接到消息代理,队列已创建并绑定:
message — 从队列接收到的消息:
error — 连接或消费错误(流结束):