curl_multi_getcontent

(PHP 5, PHP 7, PHP 8)

curl_multi_getcontent如果设置了 CURLOPT_RETURNTRANSFER,则返回 cURL 句柄的内容

描述

curl_multi_getcontent(CurlHandle $handle): ?string

如果 CURLOPT_RETURNTRANSFER 是为特定句柄设置的选项,那么此函数将以字符串的形式返回该 cURL 句柄的内容。

参数

handle

curl_init() 返回的 cURL 句柄。

返回值

如果设置了 CURLOPT_RETURNTRANSFER,则返回 cURL 句柄的内容;如果未设置,则返回 null

变更日志

版本 描述
8.0.0 handle 现在需要一个 CurlHandle 实例;以前,需要一个 resource

参见

添加说明

用户贡献说明 3 个说明

22
michael at xendica dot com
10 年前
这似乎按预期工作 - 允许我将 curl_multi 操作的内容获取到变量中

(感谢相关文档中的许多其他说明(有很多复制粘贴)我所做的只是添加了相关行)

<?
$aURLs = array("https://php.net","http://www.w3cschools.com"); // URL 数组
$mh = curl_multi_init(); // 初始化 curl Multi

$aCurlHandles = array(); // 为各个 curl 句柄创建一个数组

foreach ($aURLs as $id=>$url) { // 为每个 URL 添加句柄
$ch = curl_setup($url,$socks5_proxy,$usernamepass);
$ch = curl_init(); // 初始化 curl,然后设置选项
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // 返回结果 - 非常重要
curl_setopt($ch, CURLOPT_HEADER, 0); // 输出中不包含头

$aCurlHandles[$url] = $ch;
curl_multi_add_handle($mh,$ch);
}

$active = null;
// 执行句柄
do {
$mrc = curl_multi_exec($mh, $active);
}
while ($mrc == CURLM_CALL_MULTI_PERFORM);

while ($active && $mrc == CURLM_OK) {
if (curl_multi_select($mh) != -1) {
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
}

/* 这是相关部分 */
// 遍历句柄并获取内容
foreach ($aCurlHandles as $url=>$ch) {
$html = curl_multi_getcontent($ch); // 获取内容
// 对 HTML 执行您想要的操作
curl_multi_remove_handle($mh, $ch); // 删除句柄(假设您已完成操作);
}
/* 相关部分结束 */

curl_multi_close($mh); // 关闭 curl 多句柄

?>
-1
butesa at freenet dot de
10 年前
您可以在使用 curl_exec() 执行的 curl 句柄(而不是添加到多句柄)上使用 curl_multi_getcontent()。
但是,这没有多大用处,因为 curl_multi_getcontent() 此时将返回与 curl_exec() 相同的结果。

<?php
$ch
= curl_init('http://www.example.com/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$a = curl_exec($ch);
$b = curl_multi_getcontent($ch);
var_dump($a === $b);
curl_close($ch);
?>
将返回

bool(true)
-6
nolife
6 年前
这可能是 curl 多实现中的一个错误

在许多情况下,您在 curl_exec() 之后保持 curl 连接活动。
使用 curl_multi,如果您不在每次 get_content() 之后执行以下操作,则不可能做到这一点
curl_multi_remove_handle($ch);
curl_multi_add_handle($ch);

我还没有测试这是否也会破坏保持活动连接,但如果您不这样做,您只会获得每次 curl_multi_exec() 之后的旧响应
To Top