【问题标题】:PHP get contents of page using file_get_contents returns nothingPHP 使用 file_get_contents 获取页面内容不返回任何内容
【发布时间】:2015-12-16 01:41:37
【问题描述】:

我正在尝试使用 file_get_contents 从 roblox 网站获取数据。我正在尝试访问查找用户页面:http://www.roblox.com/search/users?keyword=

当我请求页面时,我提供了 1 个名为 username=[name] 的参数。但是,一旦我尝试加载页面,就没有返回任何结果。

我尝试了 file_get_contents、domdocument、curl。没有任何效果。我不知道该怎么办了。

<?php
    $User = $_GET["username"];
    $Result = file_get_contents("http://www.roblox.com/search/users?keyword=".$User);
    var_dump($Result);
?>

我没有收到任何错误。只是 chrome 连接超时错误。

【问题讨论】:

  • "没有返回结果" - 意思是你得到一个 blank 页面?
  • 当我尝试输出结果时,什么都没有显示。
  • 你的第一个参数是username还是keyword?因为它看起来像关键字。
  • 我使用参数用户名调用这个 php 页面。我将该值作为参数关键字添加到 roblox 页面:testformywebsites.site50.net/Processors/…
  • 它有效。更仔细地查看响应。它不是空的。看起来他们最终可能会混淆。爱我一些 ASCII 艺术 :) 他们可能提供 API?见:en.help.roblox.com/hc/en-us/articles/…

标签: php


【解决方案1】:

打开 firebug(开发工具)试试这个:http://codepad.viper-7.com/fbEOPp

必须深入挖掘才能了解发生了什么混淆。 至少一个重定向在那里。可能正在查看agent 或使用其他方式。也许看看他们是否提供 API 或查看他们的网站条款和条件。

源码显示...

      _______      _________      _____       ______     _
     / _____ \    |____ ____|    / ___ \     | ____ \   | |
    / /     \_\       | |       / /   \ \    | |   \ \  | |
    | |               | |      / /     \ \   | |   | |  | |
    \ \______         | |      | |     | |   | |___/ /  | |
     \______ \        | |      | |     | |   |  ____/   | |
            \ \       | |      | |     | |   | |        | |
     _      | |       | |      \ \     / /   | |        |_|
    \ \_____/ /       | |       \ \___/ /    | |         _
     \_______/        |_|        \_____/     |_|        |_|

     Keep your account safe! Do not paste any text here.

     If someone is asking you to paste text here then you're 
     giving someone access to your account, your gear, and
     your ROBUX.

     To learn more about keeping your account safe you can go to

     https://en.help.roblox.com/hc/en-us/articles/203313380-Account-Security-Theft-Keeping-your-Account-Safe-

(嗯,他们似乎总是在每次请求时都会吐出 - 尽管这是特定于我们如何尝试的事情)

仍然可能是该网站不喜欢您抓取他们(您的?)内容,并且正在积极尝试阻止您的尝试。

这是我在等待 15 秒后从 file_get_contents 获得的屏幕截图...

【讨论】:

  • 您是否打开了我指定的 firefox 或 chrome 开发工具?那里看起来也像几个啤酒花 - 需要一分钟。将在控制台上看到输出。无论如何,他们真的不希望你这样做。
  • 我在 chrome 开发者工具中没有得到任何东西。只有这个: /deep/ 组合器已弃用。有关详细信息,请参阅chromestatus.com/features/6750456638341120。好吧,并不是他们不想让我访问它。因为当我尝试获取主站点时,我没有任何问题。
  • 我在 codeviper 上也得到了完全相同的东西。但是我自己的网站无法管理它?会不会是我的服务器内部的东西阻止了它?
  • 可能是很多事情,他们可能正在观看 IP,可能是他们看到的代理(与服务器/php 版本等不同)。可能是他们想要防止抓取,可能是某些 XSS 预防计划的一部分。如果您真的想绕过他们正在做的任何事情,建议您尝试 cURL - 可以调整发送的代理字符串、更好地处理重定向、使用 cookie 等...
  • 等等,刚刚发现我无法访问我网站的一个页面。我的主机可能有维护或什么的。让我在我的第二个托管服务上快速尝试一下。
【解决方案2】:
只是 chrome 连接超时错误。

这表明您的 php 脚本没有失败,而是停滞不前。可能是http请求;所以,让我们尝试一下更短的超时时间:

<?php
ini_set('display_errors', true);
error_reporting(-1);

$User = $_GET["username"];
$ctx  = stream_context_create(array('http'=>array(
    'timeout'=>3.0
)));

$Result = file_get_contents(
    "http://www.roblox.com/search/users?keyword=".$User,
    false,
    $ctx
);
var_dump($Result);
?>

【讨论】:

  • 同样的结果,它仍然会出现 chrome 超时
  • 我认为与 file_get_contents 如何处理某些重定向有关。建议在这里使用 cURL。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-21
  • 1970-01-01
  • 1970-01-01
  • 2018-05-09
  • 1970-01-01
  • 2016-03-30
  • 2020-02-22
相关资源
最近更新 更多