【问题标题】:file_get_contents not working for some domainsfile_get_contents 不适用于某些域
【发布时间】:2015-01-27 11:44:57
【问题描述】:

作为要求的一部分,我需要查明域是否已停放。由于没有有效的方法来找出这一点,我将检查 DOM 中是否存在“购买此域”、“可能出售”等短语。

我发现了一些可以通过浏览器访问的托管域,但无法使用file_get_contents获取它们。

例子

$url = 'http://buythisdomain.com/'
$get = file_get_contents($url);

对于上面的输出,得到以下消息。

警告:file_get_contents(http://buythisdomain.com/):打开流失败:HTTP 请求失败!

但可以通过浏览器访问相同的 URL。我也尝试了fopen 方法,但结果相同。有什么方法可以实现吗?

【问题讨论】:

  • 该网站可能正在阻止不包含任何浏览器签名的请求,可能是因为他们不希望您从脚本中访问它们
  • @MarkBaker 哦,好吧。谢谢。那么有什么办法可以做到这一点吗?
  • 是的,创建一个filestream context,如@Brain 的回答所示

标签: php fopen file-get-contents


【解决方案1】:

许多网站,不仅是停放的域名,都使用某种机制来阻止没有有效浏览器标头的基本请求。

尝试使用像这样的浏览器发送所需标头的流上下文

$url = "http://buythisdomain.com/"
$context = stream_context_create(array(
    'http' => array(
        'method' => "GET",
        'header' =>
            "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n" .
            "Accept-Language: en-US,en;q=0.8\r\n".
            "Keep-Alive: timeout=3, max=10\r\n",
            "Connection: keep-alive",
        'user_agent' => "User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.66 Safari/535.11",
        "ignore_errors" => true,
        "timeout" => 3
    )
));
file_get_contents($url, false, $context);

【讨论】:

  • 只需要小小的确认,它适用于某些域,例如:http://makeoffer.in' 在 firebug 上收到 404 Not Found 响应。但它可以通过浏览器直接访问。有什么想法吗?
  • @KrishnaMohan 我也测试了该域,工作正常。如果您在浏览器中获得 404,那不是因为脚本,因为您的浏览器中有 404?我有点困惑。
  • 是的!我认为该域的 DOM 中有元刷新。所以当我在浏览器上测试我的代码时,得到第一个响应 HTML 像` ` 然后立即响应变成像http://localhost:81/glp?r=&u=http%3A%2F%2Flocalhost%3A81%2Fparse%2Ftest.php 所以我认为这会导致对象未发现问题。
  • @KrishnaMohan 当然这听起来很合理,但脚本应该可以按预期工作。
  • 是的!我同意..谢谢你的时间。你拯救了我的一天:)
猜你喜欢
  • 2013-06-26
  • 1970-01-01
  • 1970-01-01
  • 2013-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多