php - PHP & CURL 抓取
问题描述
当我在 Google Chrome 中运行此脚本时遇到问题,我得到一个空白页。当我使用网站的另一个链接时,它可以成功运行。我不知道发生了什么。
$curl = curl_init();
$url = "https://www.danmurphys.com.au/dm/home";
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($curl);
echo $output;
解决方案
有一些条件会使您的结果为空。如:
- 卷曲错误。
- 没有响应正文的重定向,并且 curl 不遵循重定向。
- 目标主机不提供任何响应正文。
所以在这里你必须找出问题所在。
- 对于第一种可能性,使用
curl_error
andcurl_errno
来确认 curl 在运行时没有出错。 - 其次,使用
CURLOPT_FOLLOWLOCATION
选项确保 curl 遵循重定向。 - 对于第三种可能性,我们可以使用
curl_getinfo
. 它返回一个包含“size_download”的数组。size_download 显示响应正文的长度。如果它为零,这就是您在打印时看到空白页的原因。
另一种,尝试使用var_dump
来查看输出(仅用于调试目的)。有可能curl_exec
返回 bool false 或 null。如果您打印 bool false 或 null 它将显示一个空白。
这是使用所有这些的示例。
<?php
$curl = curl_init();
$url = "https://www.danmurphys.com.au/dm/home";
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
$output = curl_exec($curl);
$info = curl_getinfo($curl);
$err = curl_error($curl);
$ern = curl_errno($curl);
if ($ern) {
printf("An error occurred: (%d) %s\n", $ern, $err);
exit(1);
}
curl_close($curl);
printf("Response body size: %d\n", $info["size_download"]);
// Debug only.
// var_dump($output);
echo $output;
希望这可以帮到你。
更新:
您可以使用CURLOPT_VERBOSE
详细查看请求和响应信息。只需添加这个
curl_setopt($curl, CURLOPT_VERBOSE, true);
它不需要打印,curl 会在运行时为您打印。
推荐阅读
- powershell - 如何自动化用户输入可执行文件?
- julia - 如何在 Julia 中运行 n 秒的计算?
- javascript - Nebular Toastr > 无法读取 null 的属性“appendChild”
- html - 如何通过 Vercel 或 Surge 部署 React 网站?
- jms - Quarkus 访问远程资源
- c - 使用 FFT 和分析库的 CVI 图像处理
- android - 如何从 Firestore 获取当前时间
- android - Firebase 收藏用户列表
- delphi - IdFtp 和 SSL:如何安全连接?
- flutter - How to create a custom Dialog in flutter