从受保护的网站获取PHP页面

时间:2014-02-14 09:33:16

标签: php

有一个浏览器可以访问的网站,但无法通过PHP CURL / file_get_contents()访问

在阅读了类似的主题和答案之后,我想出了这段仍然不起作用的代码:

$opts = array('http' =>
  array(
    'method'  => 'GET',
    'follow_location' => 1,
    'user_agent ' => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:26.0) Gecko/20100101 Firefox/26.0",
    'header' => 
        "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n".
        "Cache-Control: max-age=0\r\n".
        "Connection: keep-alive\r\n".
        "Keep-Alive: 300\r\n".
        "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n".
        "Accept-Language: en-US,en;q=0.5\r\n".
        "Accept-Encoding: gzip, deflate\r\n".
        "Host: www.netcarshow.com"
  )
);

$context  = stream_context_create($opts);

$html = file_get_contents("http://www.netcarshow.com", false, $context);

此脚本执行的结果是ERROR 403:Forbidden。我真的被卡住了。

非常感谢任何意见或建议。

2 个答案:

答案 0 :(得分:0)

假设网址受HTTP基本身份验证用户名/密码保护,则您错过了相应的标头:

Authorization: Basic [base64-encoded username:password here]

e.g。

"Authorization" => "Basic " . base64_encode('username:password')

答案 1 :(得分:0)

<?php
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://www.netcarshow.com");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    echo curl_exec($ch);
    curl_close($ch);
?>

返回您提到的403错误。

<?php
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://www.netcarshow.com");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36");
    echo curl_exec($ch);
    curl_close($ch);
?>

返回页面。

唯一的区别是用户代理设置。

服务器似乎与用户代理有关。

我还尝试使用“我的网络浏览器”作为用户代理并返回页面。