curl_copy_handle

(PHP 5, PHP 7, PHP 8)

curl_copy_handle复制 cURL 句柄及其所有首选项

描述

curl_copy_handle(CurlHandle $handle): CurlHandle|false

复制 cURL 句柄,保留相同的首选项。

参数

handle

curl_init() 返回的 cURL 句柄。

返回值

返回一个新的 cURL 句柄,或在失败时返回 false

变更日志

版本 描述
8.0.0 handle 现在需要一个 CurlHandle 实例;以前需要一个 resource
8.0.0 成功时,此函数现在返回一个 CurlHandle 实例;以前返回一个 resource

示例

示例 #1 复制 cURL 句柄

<?php
// 创建一个新的 cURL 资源
$ch = curl_init();

// 设置 URL 和其他适当的选项
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/');
curl_setopt($ch, CURLOPT_HEADER, 0);

// 复制句柄
$ch2 = curl_copy_handle($ch);

// 获取 URL (http://www.example.com/) 并将其传递给浏览器
curl_exec($ch2);

// 关闭 cURL 资源,并释放系统资源
curl_close($ch2);
curl_close($ch);
?>

添加注释

用户贡献的注释 3 个注释

administrator at proxy-list dot org
16 年前
当您尝试在 curl_multi_add_handle() 中使用刚复制的 curl 句柄时,会出现一些内部 curl 错误 (CURLE_FAILED_INIT)。我已经检查了相同的有问题 PHP 代码,但有一些细微的差别:我没有创建 curl 的副本,而是使用了原始的(模板)。正如我预期的那样,代码没有任何错误地运行。我认为 curl_multi_* 与 curl_copy_handle() 仍然比较原始,需要一些改进。

祝一切顺利

Vitali Simsive
Andrew
17 年前
您可以将其用于某种模板

<?php
$ch
= array();
$ch[0] = curl_init();
curl_setopt($ch[0], CURLOPT_URL, 'http://beengo.net/');
curl_setopt($ch[0], CURLOPT_HEADER, 0);
curl_setopt($ch[0], CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch[0], CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch[0], CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);

$ch[1] = curl_copy_handle($ch[0]);
curl_setopt($ch[1], CURLOPT_URL, 'http://beengo.net/cells/list');

$ch[2] = curl_copy_handle($ch[0]);
curl_setopt($ch[2], CURLOPT_URL, 'http://beengo.net/cells/list?q=travel');

/* 等等,当您需要获取具有相同参数的页面数量时... */

?>
ac221 at sussex dot ac dot uk
16 年前
嗯,我没有遇到这个问题,使用 PHP 5.2.5 libcurl 7.16.3,也许它已经被修复了...

我正在尝试使用 curl_copy_handle 复制所有 curlopts,但遇到了问题...

protected function curlMultiPrime(array $reqArr){
// 存储请求数组,以便我们可以重新初始化多句柄
$this->reqArr = $reqArr;
// 关闭现有的 curl 单句柄
$this->closeMultiCurlUniHandles();
foreach($reqArr as $curlConf){
if(!($curlConf instanceof curlConfRequest ))
throw new curlConfException('传递给配置请求的所有对象都必须是 curlConfRequest 的实例。',curlConfException::CURL_INVALID_CONF_OBJ);
if(!$cch = curl_copy_handle($this->curlHandle)){
throw new curlException('无法克隆模板 curl 句柄。',$this->curlHandle);
}else{
curl_setopt_array($cch,$curlConf->getCurlOpts());
}
if(curl_multi_add_handle($this->curlMultiHandle,$cch) === 0){
$this->curlUniHandleRef[] = $cch;
}else{
throw new curlException('无法将 curl 句柄添加到多堆栈中。',$cch);
}
}
}
To Top