我一直在使用PHP进行一些搜索并在特定域上获得一些奇怪的结果。例如,当我下载此页面时:
http://pitchfork.com/reviews/tracks/
工作正常。但是,如果我尝试下载此页面:
http://pitchfork.com/reviews/tracks/1/
它返回一个不完整的页面,即使内容完全相同。所有后续页面(曲目/ 2 /,曲目/ 3 /等)也会返回不完整的数据。
在分页期间URL的形成方式似乎存在问题。网站上的大多数其他部分都表现出相同的行为(着陆页有效,但不是后续页面)。这一部分有一个例外:
http://pitchfork.com/forkcast/
forkcast / 2 / etc的工作正常。这可能是因为它只是一个深度目录,其中大多数其他部分是多个深度目录。
我似乎已经掌握了导致问题的原因,但不是为什么或如何解决问题。
有什么想法吗?
我尝试过使用file_get_contents()和cURL,两者都给出相同的结果。
有趣的是,在所有不起作用的页面上,不完整的页面大约有16,000个字符。这是一个线索吗?
我创建了一个测试页面,您可以在其中看到差异:
http://fingerfy.com/test.php?url=http://pitchfork.com/reviews/tracks/
http://fingerfy.com/test.php?url=http://pitchfork.com/reviews/tracks/1/
它打印strlen()和下载页面的内容(加上它使相对url成为绝对,所以CSS是正确的。)
任何提示都会很棒!
更新:Mowser优化了移动设备页面,这些页面没有问题(http://mowser.com/web/pitchfork.com/reviews/tracks/2/)所以必须这样做才能做到这一点而不会失败....
答案 0 :(得分:0)
看起来干草叉正在运行带有“人类”网址的CMS。这意味着/ review / tracks会显示列出多个帖子的“主页”,但“/ reviews / tracks / 1”只会显示“评论#1”。他们可能已将CMS配置为仅输出固定长度的摘录,或者输出过滤器配置错误,并尽早切断各个帖子页面。
我尝试使用wget
获取/ track / 1到/ tracks / 6,并且它们都有不同的内容,这些内容完全终止于16,097字节,通常位于标记的中间。所以,这不是你可以修复的任何东西,因为它是网站本身发送错误数据。