php - CURL PHP 爬虫返回访问被拒绝错误
问题描述
我爸爸喜欢这些来自 meijer 的冷冻芝士汉堡,所以我打算写一个可以在 cron 中运行的小脚本,它会检查 Meijer 的网站和 txt 或电子邮件或其他东西,如果它们开始销售的话。
每当我运行以下脚本时,我都会从服务器收到拒绝访问响应,而不是芝士汉堡页面的 html。
我确定我只需要一个 CURL 选项或其他东西。
先感谢您
function curl_download($Url)
{
if (!function_exists('curl_init')){die('cURL is not installed. Install and try again.');}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $Url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0");
$output = curl_exec($ch);
curl_close($ch);
return $output;
}
print curl_download("https://www.meijer.com/shop/en/frozen/frozen-meals/sandwiches/meijer-bacon-cheeseburger-4-9-oz/p/71373326278");
解决方案
在服务器无法检测到您正在使用 curl 并因此不是普通人类用户之前,您很可能需要添加更多标头设置。
一些网站甚至有更高级的技术来确定您是否是人类用户,例如 JavaScript 是否加载到较早的页面上,但确保您的标头变量与实际用户请求相匹配是必要的。
您可以使用 Google Chrome 或 Firefox 检查器查看您应该发送的请求标头。
推荐阅读
- forms - 关于ms access和forms中的表关系
- javascript - 如何从n个类中获取特定类,以javascript开头?
- django - 为什么在我的项目中找不到我的静态文件夹
- loops - 尝试打印所有 ASCII 值时的无限循环
- python - Frozen Graph To Tflite Conversion Error -> ValueError - 为输入数组“wav data”提供输入形状
- python - ModuleNotFoundError:尝试导入时没有名为“iqoptionapi.stable_api”的模块
- c++ - 重载大于运算符以比较来自不同类的两个双精度值时,出现操作数错误
- javascript - 是否有一种简洁的方法可以在同一函数中更改多个 div 的 innerHTML?
- swift - 如何防止或阻止字典值为零?
- html - CSS:带过渡的不可见元素:页面加载时所有闪烁