【问题标题】:Why am I getting an Internal Server error while using Mechanize to do the file fetching?为什么在使用 Mechanize 进行文件提取时出现内部服务器错误?
【发布时间】:2010-08-05 05:58:07
【问题描述】:

我在使用 WWW::Mechanize 下载 mp4 文件时遇到问题。普通浏览器,如 Firefox,无论是否启用 Javascript,都可以毫无问题地获取文件。所以在我看来,通常的嫌疑人 Javascript 并没有在我的问题中发挥真正的作用。我还在我的脚本中添加了与 Firefox 在进行提取时发送到文件服务器相同的标头,以便服务器可以将 Mechanize 视为普通浏览器,但问题仍然存在。 Win32::IE::Mechanize 也可以很好地完成这项工作,但为什么 Mechanize 不能呢?

有什么想法吗?在此先感谢:)

这是我的脚本:

use strict;
use warnings;
use WWW::Mechanize;


my $browser = WWW::Mechanize->new();
$browser->cookie_jar(HTTP::Cookies->new()); 
$browser->add_header('User-Agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.11) Gecko/20100701 Firefox/3.5.11');
$browser->add_header('Accept' => 'text/xml,application/xml,application/xhtml+xml;q=0.9,*/*;q=0.8');
$browser->add_header('Accept-Language' => 'zh-cn,zh;q=0.5');
$browser->add_header('Accept-Encoding' => 'gzip,deflate');
$browser->add_header('Accept-Charset' => 'GB2312,utf-8;q=0.7,*;q=0.7');
$browser->add_header('Keep-Alive' => 300);
$browser->add_header('Connection' => 'keep-alive');

my $url = 'http://119.167.217.206:19765/ppvaplaybyopen?url=http://119.167.217.206/%d3%e9%c0%d6%b0%d9%b7%d6%b0%d9-100803-%d0%a1%d6%ed%bd%dc%c2%d7%b7%d6%d7%e9%d0%e3%c7%f2%bc%bc.mp4/segno=0%26&rid=A8F1F5DFEB1B11F1D90B40AD1BB75D69&filelength=21293994&blocksize=2097152&blocknum=11&blockmd5=E210862B3F92935D0883E00AA2A38F08@D793599727C6DA4ACDB1CBF2235004AC@D5E9C9245C9A1BB63BC5EDA862A32604@51B5FDF91356B2B4E943EF72648EB0AD@6F2400488B04EBF66A60336B795EA142@8E51B8DCF87A7A02B84A2CAA5FFCA3CF@89080D683268481694DBA6D1E22A2EFF@8F56225C76854A434385A09C319BF9C3@9AB0A3F199183F479F8887D1C3341B1B@845FE0D711086CC2D086546CD26B35C1@9D93A9BE1D2EDE216AA9EBF26BF414BE';

$browser->get($url);

我收到以下错误消息:

Error GETing http://119.167.217.206:19765/ppvaplaybyopen?url=http://119.167.217.206/%d3%e9%c0%d6%b0%d9%b7%d6%b0%d9-100803-%d0%a1%d6%ed%bd%dc%c2%d7%b7%d6%d7%e9%d
0%e3%c7%f2%bc%bc.mp4/segno=0%26&rid=A8F1F5DFEB1B11F1D90B40AD1BB75D69&filelength=21293994&blocksize=2097152&blocknum=11&blockmd5=E210862B3F92935D0883E00AA2A38F08
@D793599727C6DA4ACDB1CBF2235004AC@D5E9C9245C9A1BB63BC5EDA862A32604@51B5FDF91356B2B4E943EF72648EB0AD@6F2400488B04EBF66A60336B795EA142@8E51B8DCF87A7A02B84A2CAA5FF
CA3CF@89080D683268481694DBA6D1E22A2EFF@8F56225C76854A434385A09C319BF9C3@9AB0A3F199183F479F8887D1C3341B1B@845FE0D711086CC2D086546CD26B35C1@9D93A9BE1D2EDE216AA9EB
F26BF414BE: Internal Server Error at E:\pp2.pl line 17

【问题讨论】:

    标签: perl mechanize


    【解决方案1】:

    当我访问相同的 URL 时,我得到相同的“内部服务器错误”。可能的原因:

    1. 您没有正确设置referer。

    2. 您有一些身份验证,您在浏览器中执行此操作,或存储在 cookie 中的任何其他数据。

    一般来说,在其他浏览器中打开 URL 是检查此类事情的好方法。 “Live http headers” Firefox 扩展是检查此类内容的好方法。

    【讨论】:

    • 感谢您的指点。我使用 Live HTTP Headers 来记录发送到服务器的标头,然后将这些标头添加到我的脚本中。我也试过删除所有 cookie,然后在 IE 中打开 URL,文件保存对话框会按预期弹出。现在正如您所建议的,我也尝试在我的脚本中添加引用,但没有运气。好吧,我想知道如果不是 Javascript、标头和 cookie,还有什么可能是问题的原因。
    【解决方案2】:

    “内部服务器错误”错误的另一种可能性是您的连接已重置

    【讨论】:

      猜你喜欢
      • 2023-04-01
      • 2021-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-23
      相关资源
      最近更新 更多