使用 curl_multi_await 时为空响应
empty response when using curl_multi_await
我正在测试文档中 curl_multi_await 的示例(请参阅下面的代码),但我无法得到任何响应。
我正在使用 hhvm 的 3.8.1 版。
我遇到了 HH\Asio\curl_exec 的问题,但已通过更新 hhvm 解决,是否相关?
<?hh
async function curl_exec_await(string $url): Awaitable<string> {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$mh = curl_multi_init();
curl_multi_add_handle($mh, $ch);
do {
$active = 1;
do {
$status = curl_multi_exec($mh, $active);
} while ($status == CURLM_CALL_MULTI_PERFORM);
$select = await curl_multi_await($mh);
if ($select == -1) break;
} while ($status === CURLM_OK);
$content = (string)curl_multi_getcontent($ch);
curl_multi_remove_handle($mh, $ch);
curl_multi_close($mh);
return $content;
}
var_dump(curl_exec_await('http://example.com')->getWaitHandle()->join());
此代码打印空字符串。
感谢您的帮助!
- 文档中的函数(您已在此处复制)只是一个示例。它在 stdlib 中作为
\HH\Asio\curl_exec
可用,您可以直接使用它来代替您的 curl_exec_await
。参见 the docs。
- 如果该功能仍然不起作用,您能否检查您的错误日志中是否有任何错误输出,并且file an issue on GitHub以便我们找出问题所在?在 SO 上跟踪问题比这里好得多。
这里是固定的例子,如果它可以帮助某人:
<?hh
async function curl_exec_await(string $url): Awaitable<string> {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$mh = curl_multi_init();
curl_multi_add_handle($mh, $ch);
$active = 0;
do {
$status = curl_multi_exec($mh, $active);
await RescheduleWaitHandle::create(
RescheduleWaitHandle::QUEUE_DEFAULT,
0,
);
} while ($status == CURLM_CALL_MULTI_PERFORM || $active > 0);
await curl_multi_await($mh);
$content = (string)curl_multi_getcontent($ch);
curl_multi_remove_handle($mh, $ch);
curl_multi_close($mh);
return $content;
}
var_dump(curl_exec_await('http://example.com')->getWaitHandle()->join());
我正在测试文档中 curl_multi_await 的示例(请参阅下面的代码),但我无法得到任何响应。 我正在使用 hhvm 的 3.8.1 版。
我遇到了 HH\Asio\curl_exec 的问题,但已通过更新 hhvm 解决,是否相关?
<?hh
async function curl_exec_await(string $url): Awaitable<string> {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$mh = curl_multi_init();
curl_multi_add_handle($mh, $ch);
do {
$active = 1;
do {
$status = curl_multi_exec($mh, $active);
} while ($status == CURLM_CALL_MULTI_PERFORM);
$select = await curl_multi_await($mh);
if ($select == -1) break;
} while ($status === CURLM_OK);
$content = (string)curl_multi_getcontent($ch);
curl_multi_remove_handle($mh, $ch);
curl_multi_close($mh);
return $content;
}
var_dump(curl_exec_await('http://example.com')->getWaitHandle()->join());
此代码打印空字符串。
感谢您的帮助!
- 文档中的函数(您已在此处复制)只是一个示例。它在 stdlib 中作为
\HH\Asio\curl_exec
可用,您可以直接使用它来代替您的curl_exec_await
。参见 the docs。 - 如果该功能仍然不起作用,您能否检查您的错误日志中是否有任何错误输出,并且file an issue on GitHub以便我们找出问题所在?在 SO 上跟踪问题比这里好得多。
这里是固定的例子,如果它可以帮助某人:
<?hh
async function curl_exec_await(string $url): Awaitable<string> {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$mh = curl_multi_init();
curl_multi_add_handle($mh, $ch);
$active = 0;
do {
$status = curl_multi_exec($mh, $active);
await RescheduleWaitHandle::create(
RescheduleWaitHandle::QUEUE_DEFAULT,
0,
);
} while ($status == CURLM_CALL_MULTI_PERFORM || $active > 0);
await curl_multi_await($mh);
$content = (string)curl_multi_getcontent($ch);
curl_multi_remove_handle($mh, $ch);
curl_multi_close($mh);
return $content;
}
var_dump(curl_exec_await('http://example.com')->getWaitHandle()->join());