首页 > 解决方案 > 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");

标签: php

解决方案


在服务器无法检测到您正在使用 curl 并因此不是普通人类用户之前,您很可能需要添加更多标头设置。

服务器可以阻止 curl 请求吗?

一些网站甚至有更高级的技术来确定您是否是人类用户,例如 JavaScript 是否加载到较早的页面上,但确保您的标头变量与实际用户请求相匹配是必要的。

您可以使用 Google Chrome 或 Firefox 检查器查看您应该发送的请求标头。


推荐阅读