PHP Conference Japan 2024

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

参见

添加注释

用户贡献的注释 2 条注释

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

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

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

$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
11 年前
您可以对使用 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)
To Top