You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用curl发送仅URL不同的两个请求 复用头参数避免重复代码

方案1:串行复用curl句柄(低请求量场景首选)

仅初始化一次curl、配置一次公共参数,遍历URL时仅修改CURLOPT_URL即可,无冗余代码:

// 统一管理所有目标域名
$urls = [
    "www.example1.com",
    "www.example2.com"
];

$curl = curl_init();
// 公共配置仅设置一次
curl_setopt_array($curl, array(
    CURLOPT_POST => TRUE,
    CURLOPT_RETURNTRANSFER => TRUE,
    CURLOPT_POSTFIELDS => json_encode($body),
    CURLOPT_HTTPHEADER => $headers,
));

$responses = [];
foreach ($urls as $key => $baseUrl) {
    // 仅更新请求URL,其余配置复用
    curl_setopt($curl, CURLOPT_URL, $baseUrl . '/api/v1/orders');
    $responses[$key] = curl_exec($curl);
    // 可选错误处理
    if (curl_errno($curl)) {
        $responses[$key] = ['error' => curl_error($curl)];
    }
}
curl_close($curl);

// 使用示例:$responses[0] 对应url1的返回结果,$responses[1]对应url2的返回结果

方案2:并行请求(高效场景可选)

如果想要减少总请求耗时,可以用curl_multi实现同时发送两个请求,无需等待前一个请求返回再发下一个:

$urls = [
    "www.example1.com/api/v1/orders",
    "www.example2.com/api/v1/orders"
];
$mh = curl_multi_init();
$handles = [];

foreach ($urls as $i => $fullUrl) {
    $handles[$i] = curl_init($fullUrl);
    // 公共配置批量应用到每个句柄
    curl_setopt_array($handles[$i], [
        CURLOPT_POST => TRUE,
        CURLOPT_RETURNTRANSFER => TRUE,
        CURLOPT_POSTFIELDS => json_encode($body),
        CURLOPT_HTTPHEADER => $headers,
    ]);
    curl_multi_add_handle($mh, $handles[$i]);
}

// 执行并行请求
do {
    $status = curl_multi_exec($mh, $active);
    if ($active) {
        curl_multi_select($mh);
    }
} while ($active && $status == CURLM_OK);

// 收集所有响应结果
$responses = [];
foreach ($handles as $i => $ch) {
    $responses[$i] = curl_multi_getcontent($ch);
    curl_multi_remove_handle($mh, $ch);
    curl_close($ch);
}
curl_multi_close($mh);

内容的提问来源于stack exchange,提问作者치노장인

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 14:27:03