simple html dom 未能打开站点流

simple html dom failed to open stream for a site

我正在尝试解析 http://whatismyip.com 页面并获取我的位置(州和国家/地区)。数据似乎在 <table class="table"> 标签内,所以我正在寻找 "table"。 但是我弄错了Warning: file_get_contents(https://whatismyip.com): failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden in C:\xampp4\htdocs\scraping\libs\simple_html_dom.php on line 1081

不知道哪里出了问题。

 <?php
        require_once('libs/simple_html_dom.php');
        $html=new simple_html_dom();

        $html->load_file('https://whatismyip.com');

        $element=$html->find("table");


    ?>

该网站正在检查请求的 User-Agent header,但 PHP 不发送任何请求(默认情况下)。您必须 "impersonate" 一个浏览器:

$context = stream_context_create(array(
    'http' => array(
        'header' => array('User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; rv:2.2) Gecko/20110201'),
    ),
));

$html = file_get_contents('http://whatismyip.com/', false, $context);

// do what you want with the $html

更好(更快)的选择是为此使用一些库。我以前用过 GeoIP2-php,但我确定还有更多。

基本上你的例子很好,但这里的错误很简单html dom 类 不使用 Https 所以尝试另一种方法

$curl = curl_init();
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_URL, "https://whatismyip.com");
curl_setopt($curl, CURLOPT_REFERER, "https://whatismyip.com");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; rv:2.2) Gecko/20110201');
$str = curl_exec($curl);
curl_close($curl);

然后使用您的代码

    $html->load_file($str);
    $element=$html->find("table");

编辑 添加用户代理以模拟真实的导航器(感谢 ShiraNai7)

尝试使用以下命令更改用户代理 -

ini_set("user_agent","Mozilla/5.0 (Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/8.0");

这样就可以正常工作了!