curl --request POST \
--url https://api.brightdata.com/dca/trigger \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
[
{
"url": "https://targetwebsite.com/product_id/"
}
]
'import requests
url = "https://api.brightdata.com/dca/trigger"
payload = [{ "url": "https://targetwebsite.com/product_id/" }]
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify([{url: 'https://targetwebsite.com/product_id/'}])
};
fetch('https://api.brightdata.com/dca/trigger', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.brightdata.com/dca/trigger",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
[
'url' => 'https://targetwebsite.com/product_id/'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.brightdata.com/dca/trigger"
payload := strings.NewReader("[\n {\n \"url\": \"https://targetwebsite.com/product_id/\"\n }\n]")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.brightdata.com/dca/trigger")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("[\n {\n \"url\": \"https://targetwebsite.com/product_id/\"\n }\n]")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.brightdata.com/dca/trigger")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "[\n {\n \"url\": \"https://targetwebsite.com/product_id/\"\n }\n]"
response = http.request(request)
puts response.read_body{
"collection_id": "ID_DATASET",
"start_eta": "2021-11-07T13:26:22.702Z"
}异步触发爬虫进行批量采集
使用 POST /dca/trigger 为 Scraper Studio 采集器启动异步批量采集。请求体是输入对象的 JSON 数组,并返回 collection_id 以便稍后获取结果。
curl --request POST \
--url https://api.brightdata.com/dca/trigger \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
[
{
"url": "https://targetwebsite.com/product_id/"
}
]
'import requests
url = "https://api.brightdata.com/dca/trigger"
payload = [{ "url": "https://targetwebsite.com/product_id/" }]
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify([{url: 'https://targetwebsite.com/product_id/'}])
};
fetch('https://api.brightdata.com/dca/trigger', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.brightdata.com/dca/trigger",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
[
'url' => 'https://targetwebsite.com/product_id/'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.brightdata.com/dca/trigger"
payload := strings.NewReader("[\n {\n \"url\": \"https://targetwebsite.com/product_id/\"\n }\n]")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.brightdata.com/dca/trigger")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("[\n {\n \"url\": \"https://targetwebsite.com/product_id/\"\n }\n]")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.brightdata.com/dca/trigger")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "[\n {\n \"url\": \"https://targetwebsite.com/product_id/\"\n }\n]"
response = http.request(request)
puts response.read_body{
"collection_id": "ID_DATASET",
"start_eta": "2021-11-07T13:26:22.702Z"
}POST /dca/trigger 为已发布的 Bright Data Scraper Studio 采集器启动异步批量采集。请求体是输入对象的 JSON 数组,每个对象都必须与采集器的输入模式匹配。
该端点会立即返回一个 collection_id。采集完成后,使用该 ID 调用接收批量数据端点(GET /dca/dataset)来获取结果。
请求
请求体是输入对象的 JSON 数组。每个对象都必须与你在 Scraper Studio 中为采集器定义的输入模式匹配。基于 URL 的采集器可能需要url 字段,而其他采集器可能需要 keyword、location、country 等字段或自定义输入字段。
请求体必须是 JSON 数组。如果只有单个输入,请发送只包含一个对象的数组。
curl --request POST \
--url 'https://api.brightdata.com/dca/trigger?collector=YOUR_COLLECTOR_ID&queue_next=1' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '[
{ "url": "https://example.com/product/1" },
{ "url": "https://example.com/product/2" }
]'
import os, requests
response = requests.post(
"https://api.brightdata.com/dca/trigger",
params={"collector": os.environ["BRIGHT_DATA_COLLECTOR_ID"], "queue_next": 1},
headers={
"Authorization": f"Bearer {os.environ['BRIGHTDATA_API_KEY']}",
"Content-Type": "application/json",
},
json=[
{"url": "https://example.com/product/1"},
{"url": "https://example.com/product/2"},
],
)
collection_id = response.json()["collection_id"]
const url = new URL("https://api.brightdata.com/dca/trigger");
url.searchParams.set("collector", process.env.BRIGHT_DATA_COLLECTOR_ID);
url.searchParams.set("queue_next", "1");
const response = await fetch(url, {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.BRIGHTDATA_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify([
{ url: "https://example.com/product/1" },
{ url: "https://example.com/product/2" },
]),
});
const { collection_id } = await response.json();
响应
{
"collection_id": "j_abc123def456",
"start_eta": "2026-05-22T13:26:22.702Z"
}
collection_id 标识本次采集运行。调用 GET /dca/dataset 时,将它作为 id 的值来获取结果。
curl --request GET \
--url 'https://api.brightdata.com/dca/dataset?id=j_abc123def456' \
--header 'Authorization: Bearer YOUR_API_KEY'
| 字段 | 类型 | 说明 |
|---|---|---|
collection_id | string | 采集运行的 ID。使用该值从 GET /dca/dataset 获取结果。 |
start_eta | string | 采集的预计开始时间,采用 ISO 8601 格式。 |
在采集完成时发送通知
使用notify 查询参数,在批量采集完成时发送 webhook 或邮件通知。该参数接受一个 JSON 对象,以 URL 查询参数的形式传递,因此值必须经过 URL 编码。单独使用 notify(不带 deliver)时,通知在采集作业完成后发送。
以下 cURL 示例触发批量采集,并在作业完成时发送 webhook 通知。--url-query 选项(curl 7.87.0 起可用)会自动对 JSON 值进行 URL 编码:
curl --request POST "https://api.brightdata.com/dca/trigger" \
--url-query "collector=YOUR_COLLECTOR_ID" \
--url-query 'notify={"type":"webhook","endpoint":"https://example.com/webhook"}' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '[{ "url": "https://example.com/product/1" }]'
collection_id 响应相同。采集作业完成后,Bright Data 会向配置的端点发送通知。
notify 对象包含以下字段:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
type | string | 是 | 通知类型:webhook 或 email。 |
endpoint | string | webhook 类型必填 | 接收通知的 webhook URL。 |
为单个请求覆盖交付设置
使用deliver 查询参数,为特定请求覆盖爬虫的默认交付设置。这样可以将采集结果交付到与控制面板交付偏好中配置的目标不同的目的地,而无需修改爬虫配置。与 notify 相同,该参数接受一个经 URL 编码的 JSON 对象。
以下示例触发批量采集,将结果交付到 Amazon S3,并在交付完成后发送 webhook 通知:
COLLECTOR=YOUR_COLLECTOR_ID
DELIVER='{
"type": "s3",
"bucket": "YOUR_BUCKET",
"credentials": {
"aws-access-key": "YOUR_AWS_ACCESS_KEY",
"aws-secret-key": "YOUR_AWS_SECRET_KEY"
},
"region": "YOUR_REGION",
"directory": "brightdata/YOUR_DIRECTORY",
"filename": {
"template": "results_{[datetime]}",
"extension": "json"
},
"delivery_type": "deliver_results"
}'
NOTIFY='{
"type": "webhook",
"endpoint": "https://example.com/webhook"
}'
curl --request POST "https://api.brightdata.com/dca/trigger" \
--url-query "collector=$COLLECTOR" \
--url-query "deliver=$DELIVER" \
--url-query "notify=$NOTIFY" \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '[{ "url": "https://example.com/product/1" }]'
deliver 对象支持与交付偏好相同的目标类型,包括 s3、gcs、azure、sftp、webhook 和 email。
notify 与 deliver 的组合行为
| 配置 | 行为 |
|---|---|
不使用 notify 和 deliver | 使用爬虫的默认交付设置,不发送请求级通知。 |
仅使用 notify | 在采集作业完成时发送通知。 |
仅使用 deliver | 使用请求级交付配置交付结果。 |
deliver 与 notify 同时使用 | 使用请求级交付配置交付结果,然后在交付完成时发送通知。 |
何时使用批量采集
在以下情况下使用批量采集(POST /dca/trigger):
- 你需要在一次运行中处理多个输入。
- 你可以等待采集完成后再获取结果。
- 你希望稍后通过
collection_id获取结果。 - 你正在构建数据集或定时采集工作流。
错误
| 状态码 | 原因 | 解决方法 |
|---|---|---|
401 Unauthorized | 令牌缺失、格式错误或已撤销 | 从账户设置 → API 令牌重新复制 |
404 Not Found | 采集器 ID 不存在,或你的账户无访问权限 | 在 Scraper Studio 中打开采集器并重新复制 ID |
422 Unprocessable Entity | 请求体中的对象与采集器的输入模式不匹配 | 对照采集器的输入选项卡确认字段名称 |
5xx | Bright Data API 临时错误 | 使用指数退避重试,例如 1s、2s、4s |
重试行为
使用相同的输入重新触发会创建一个带有新collection_id 的新采集运行。该端点不是幂等的,也不会在多次运行之间对输入去重。如果只想重试失败的输入,请使用获取作业错误识别本次运行中失败的输入,然后仅用这些输入触发一次新的采集。授权
在 Authorization 头中使用您的 Bright Data API Key 作为 Bearer token。
认证方法:
- 从 Bright Data 账户设置获取您的 API Key: https://brightdata.com/cp/setting/users
- 在请求的 Authorization 头中包含 API Key
- 格式:
Authorization: Bearer YOUR_API_KEY
示例:
Authorization: Bearer b5648e1096c6442f60a6c4bbbe73f8d2234d3d8324554bd6a7ec8f3f251f07df
了解如何获取 Bright Data API Key: https://docs.brightdata.com/cn/api-reference/authentication#如何生成新的-api-key?
查询参数
scraper 的唯一标识
设置为 dev 以触发 scraper 的开发版本
human_name - 批处理的可读名称
如果抓取队列中已有任务,将此任务加入队列
发送另一个批次的请求,该批次将在上一个完成后启动
取消正在运行的任务并替换运行,提交请求后取消当前任务
禁用媒体文件下载
设置任务截止时间,超过指定时间任务将被终止。h 表示小时,m 表示分钟,s 表示秒。
本请求的通知配置,为 URL 编码的 JSON 对象。单独使用时,在采集作业完成后发送通知;与 deliver 一起使用时,在交付完成后发送通知。
"{\"type\":\"webhook\",\"endpoint\":\"https://example.com/webhook\"}"
请求级交付配置,为 URL 编码的 JSON 对象。仅对本次采集覆盖爬虫在交付偏好中配置的默认交付设置。
"{\"type\":\"s3\",\"bucket\":\"YOUR_BUCKET\",\"credentials\":{\"aws-access-key\":\"YOUR_AWS_ACCESS_KEY\",\"aws-secret-key\":\"YOUR_AWS_SECRET_KEY\"},\"region\":\"YOUR_REGION\",\"directory\":\"brightdata/YOUR_DIRECTORY\",\"filename\":{\"template\":\"results_{[datetime]}\",\"extension\":\"json\"},\"delivery_type\":\"deliver_results\"}"
请求体
响应
OK
此页面对您有帮助吗?