【问题标题】:simple html dom url length error简单的 html dom url 长度错误
【发布时间】:2013-05-28 05:07:31
【问题描述】:
<?php
include('../simple_html_dom.php');

$fname = "http://www.myurl.com";

$html = file_get_html($fname);

$divs = $html->find('h6');
foreach($divs as $element)
{
 $title = $element->find('a', 0)->plaintext;
 echo $title.'<br>';
}
echo '<br>';
?>

我收到了这个错误:

“打开流失败:HTTP 请求失败!HTTP/1.1 500 Internal Server Error in.......”

我的网址很长,它的实际长度是 750 个字符。 如果我使用 wget 它会显示“文件名太长”

我该如何解决?我需要它来处理简单的 dom

【问题讨论】:

  • 您的网址是否在合法浏览器中有效?
  • 是的,它适用于所有浏览器...我添加了我的网址,请检查
  • 那可能是服务器因为 User-Agent 什么的而拒绝服务你的请求。您是否控制此 URL 的服务器?
  • 如何通过我的服务器检查它?
  • 该 URL 在我的浏览器中也不起作用。

标签: php simple-html-dom


【解决方案1】:

对于 URL 长度,750 个字符是可以的。最常用的实际限制是 2000 个字符,这是旧版 IE 的限制。

您应该尝试模拟发出请求的网络浏览器。见this other question

编辑:在您的代码中使用 CURL

<?php

// include is not a function, don't use parens (also use require instead)
require '../simple_html_dom.php';

$fname = "http://www.myurl.com";

$agent= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';

$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
// don't want to polute your output
//curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_URL, $fname);
$result=curl_exec($ch);

$html = new simple_html_dom();
$html->load($result);

$divs = $html->find('h6');
foreach($divs as $element)
{
 $title = $element->find('a', 0)->plaintext;
 echo $title.'<br>';
}
echo '<br>';

【讨论】:

  • 但 youtubeonfire.com 将服务于 file_get_html。所以没有必要尝试这个解决方案......
  • 谢谢... 问题是... url 更改了每个 ip 的链接... 它在我的本地主机上工作正常.. 与我的另一个 apache 服务器不工作相同的链接。谢谢你
【解决方案2】:

网址长度没问题。链接可能已损坏或已过期。 我尝试使用下面显示的链接,结果似乎很好:

<?php
include("simple_html_dom.php");

$fname = "http://www.youtubeonfire.com/?genre=0&language=0&next_token=rO0ABXNyACdjb20uYW1hem9uLnNkcy5RdWVyeVByb2Nlc3Nvci5Nb3JlVG9rZW7racXLnINNqwMA%0AC0kAFGluaXRpYWxDb25qdW5jdEluZGV4WgAOaXNQYWdlQm91bmRhcnlKAAxsYXN0RW50aXR5SURa%0AAApscnFFbmFibGVkSQAPcXVlcnlDb21wbGV4aXR5SgATcXVlcnlTdHJpbmdDaGVja3N1bUkACnVu%0AaW9uSW5kZXhaAA11c2VRdWVyeUluZGV4TAANY29uc2lzdGVudExTTnQAEkxqYXZhL2xhbmcvU3Ry%0AaW5nO0wAEmxhc3RBdHRyaWJ1dGVWYWx1ZXEAfgABTAAJc29ydE9yZGVydAAvTGNvbS9hbWF6b24v%0Ac2RzL1F1ZXJ5UHJvY2Vzc29yL1F1ZXJ5JFNvcnRPcmRlcjt4cAAAAAEAAAAAAAABds0AAAAAAQAA%0AAAC71ED7AAAAAAFwdAAQMDAwMDAwMDAwMDAwMjAxM35yAC1jb20uYW1hem9uLnNkcy5RdWVyeVBy%0Ab2Nlc3Nvci5RdWVyeSRTb3J0T3JkZXIAAAAAAAAAABIAAHhyAA5qYXZhLmxhbmcuRW51bQAAAAAA%0AAAAAEgAAeHB0AApERVNDRU5ESU5HeA%3D%3D&sort=2";

$html = file_get_html($fname);

$divs = $html->find("h6");
foreach($divs as $element) {
    $title = $element->find("a", 0)->plaintext;
    echo($title . "<br />");
}
echo("<br />");

输出:

Spider (2013)
500 MPH STORM 2013 HD
Van Diemans Land (Action,Adventure,20...
Good Agent is A Bad Agent (Full HQ En...
Employee of the Month (Full HQ Englis...
The Croods (2013)
GIRLFRIENDS - 2013
Boys Are Pigs-2013
The Patriot -2013
My Daughter&#x27;s Secret -2013
Dead on Arrival [2013]
Flght 2013XViD1
Samsung Galaxy S4 Presentation UNPACK...
Affinity 2013
Golden Globe Awards 2013: Full Show
Parker-2013
Hells&#x27; Kitchen-  New Action Movie 2013
ALIENS [2013]
7 Nights Of Darkness -2013
Hansel And Gretel 2013
The Collection (2012)
Mac And Devin Go To High School 2012
Red Dawn (2012)
Hijacked -2012
Bending The Rules -2012
Inside -2012
VAMPIRELAND-2012
Dead Mine -2012
Devil Seed-2012
Kill Em All -2012
One In The Chamber -2012
The Forger - 2012
Dark Desire -2012
A Common Man -2012 .
The Helpers -2012
Red Dawn- 2012 720p

所以,修复 URL 的问题,一切都会好起来的!

【讨论】:

  • 仔细检查您的链接。您确定它(现在)可以通过浏览器工作吗?
【解决方案3】:

您说您的 URL 在您的浏览器中工作,而我们这里的所有人都收到 500 错误,就像您的脚本一样。

该站点可能会根据 IP 和请求的其他标头检查 URL 中的令牌。因此,您需要找到一种从 PHP 脚本中获取标记化 URL 的方法。

为此,您需要首先从您的 PHP 脚本下载主页,然后找到下一个链接的 URL 并在您的脚本中使用这个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    • 2018-02-23
    • 1970-01-01
    • 2023-03-04
    • 2013-12-26
    相关资源
    最近更新 更多