【问题标题】:URI::Fetch failing when par-packedURI::Fetch 在 par-packed 时失败
【发布时间】:2013-06-27 17:02:12
【问题描述】:

我有一个程序,它使用 HTML::TagParser 和图书的条形码为一本书引入一个页面,抓取一定的跨度,在不同的页面上重复它,然后将它添加到 TK::MListbox 直到被选中导出它。这在 Eclipse 中运行良好。但是,一旦使用 par-packer 制作了 .exe,该程序就无法运行。使用条码31412007436751时的错误是这样的:

Tk::Error: URI::Fetch failed: https://i-share.carli.illinois.edu/uis/cgi-bin/shelflister.cgi?search=s1&bcs=31412007436751&bce=&stpt=1&mode=1 at script/ShelfLister_Lister.pl line 32.
 Carp::croak at C:/strawberry/perl/lib/Carp.pm line 100
 HTML::TagParser::fetch at HTML/TagParser.pm line 261
 HTML::TagParser::new at HTML/TagParser.pm line 239
 main::addBook at script/ShelfLister_Lister.pl line 32
 <Key-Return>
 (command bound to event)

相关的程序代码是这样的:

#!/user/bin/perl
use strict;
use warnings;
use Tk;
use Tk::MListbox;
use LWP::Simple;
use URI::Fetch;
use Encode::Byte;
use HTTP::Response;
use HTML::TagParser;
use Spreadsheet::WriteExcel;

my ($callNumber, $title, $html, $numItems);
my $savetypes = [['Excel Files', '.xls'], ['Comma-Separated Files', '.csv'], ['Text Files', '.txt']];
my $mw = new MainWindow;
$mw->title("Barcode Lister");
$mw->Label(-text=>'Choose Books')->grid(-row=>1, -column=>1, -columnspan=>2, -pady=>10);
my $barcode = $mw->Entry(-width=>50)->grid(-row=>2, -column=>1, -pady=>5, -padx=>[5, 10]);
my $add = $mw->Button(-text=>'Add Record', -command=>\&addBook, -width=>15)->grid(-row=>2, -column=>2, -pady=>5);
my $listFrame = $mw->Frame(-bd=>2, -relief=>"sunken")->grid(-row=>3, -column=>1, -padx=>[5, 10], -pady=>5);
my $list = $listFrame->Scrolled(qw(MListbox -background white -scrollbars oe))->pack(-expand=>1, -fill=>"both");
$list->columnInsert('end', -text=>"Call number", -width=>23);
$list->columnInsert('end', -text=>"Title", -width=>25);
my $delete = $mw->Button(-text=>'Delete Record', -command=>\&removeBook, -width=>15)->grid(-row=>3, -column=>2, -pady=>5);
my $export = $mw->Button(-text=>'Export List', -command=>\&exportList, -width=>15)->grid(-row=>4, -column=>1, -columnspan=>2, -pady=>5);
$barcode->bind('<Return>'=>\&addBook);
$barcode->focus;

MainLoop;

sub addBook{
    $html = HTML::TagParser->new('https://i-share.carli.illinois.edu/uis/cgi-bin/shelflister.cgi?search=s1&bcs=' . $barcode->get() . '&bce=&stpt=1&mode=1');
    $title = $html->getElementsByClassName('listLine');
    if (ref $title){
        $html = HTML::TagParser->new('https://i-share.carli.illinois.edu/uis/cgi-bin/shelflister.cgi?search=s1&bcs=' . $barcode->get() . '&bce=&stpt=1&mode=2');
        $list->insert("end", [$title->innerText(), $html->getElementsByClassName('listLine')->innerText()]);
        $barcode->delete(0, 'end');
    }
    else{
        $mw->messageBox(-title=>'Error', -message=>"Barcode not found.", -type=>'Ok', -icon=>'error', -default=>'ok');
    }
}

有人对我如何让它作为 .exe 工作有任何想法吗?

【问题讨论】:

    标签: perl uri par


    【解决方案1】:

    URI::Fetch-&gt;errstr 可能会提供有关失败的更多信息。尝试修补 HTML::TagParser(请参阅 https://rt.cpan.org/Ticket/Display.html?id=86698),或者可以将与 HTML::TagParser 相关的代码行包装到 eval { } 中,并在出现错误时自行调用 errstr 函数。

    【讨论】:

    • 很抱歉在将近一年后回到这个问题,但这实际上回答了我需要做的事情才能完美地获得更多错误信息。谢谢。
    猜你喜欢
    • 2018-03-30
    • 1970-01-01
    • 2015-07-15
    • 2017-12-02
    • 1970-01-01
    • 2018-03-02
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多