file_get_contents,curl,wget失败,403响应

时间:2017-10-21 05:38:33

标签: php ssl curl

我正在尝试回应网站数据&对于95%的网站file_get_content,curl工作得很好,但对于少数网站,它无论我尝试过什么都不行。我尝试定义正确的用户代理,将SSL验证更改为false但没有任何效果。

使用禁止https://norskbymiriams.dk/

测试失败的网站

wget无法复制ssl站点,但wget是使用ssl支持编译的。用wget -V

检查

我试过这些codes.none为这个特定的网站工作

file_get_contents

$list_url = "https://norskbymiriams.dk/";
$html = file_get_contents($list_url);
echo $html;


curl


$handle=curl_init('https://norskbymiriams.dk');
curl_setopt($handle, CURLOPT_HEADER, true);
curl_setopt($handle, CURLOPT_VERBOSE, true);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($handle, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36");
curl_setopt($handle, CURLOPT_FOLLOWLOCATION, true);
$content = curl_exec($handle);

echo $content; 

任何帮助都会很棒

1 个答案:

答案 0 :(得分:1)

有些网站对请求的分析非常好。如果只有一件事让Web服务器认为你是一个爬行机器人,它可能会返回403。

我会试试这个:

  1. 从浏览器发出请求,查看所有请求标头,并将它们放入我的curl请求中(模拟真实的浏览器)。 enter image description here

  2. 我的卷曲请求看起来像这样:

  3.   

    卷曲'https://norskbymiriams.dk/'
      -H'升级 - 不安全请求:1'   -H   'User-Agent:Mozilla / 5.0(Macintosh; Intel Mac OS X 10_11_6)   AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 61.0.3163.100   Safari浏览器/ 537.36'
      --compressed

    请试一试。它有效。

    1. 例如,您可以在Chrome中发出请求,并使用开发人员工具中的“网络”标签检查网页请求。如果右键单击它,您将看到复制为cURL enter image description here

    2. 因此,请在实际的cURL请求中单独测试每个标头,查看哪个是缺失的链接,然后添加它并继续抓取。