Php 机械化过帐错误

Php 机械化过帐错误,php,perl,post,get,mechanize,Php,Perl,Post,Get,Mechanize,好吧,为了让这个脚本启动并运行,已经花了很多时间,现在我遇到的唯一问题是偶尔出现的get和POST错误,导致它重新启动脚本,这很烦人 sub Fight { my($cpm); $parsed = 0; while ($parsed == 0) {sleep(3); $mech->get("http://www.lordsoflords.com/m3/fight_control.php"); $a = $mech->content();if ($a =~ m/Skeleton/) {

好吧,为了让这个脚本启动并运行,已经花了很多时间,现在我遇到的唯一问题是偶尔出现的get和POST错误,导致它重新启动脚本,这很烦人

sub Fight {
my($cpm);
$parsed = 0; while ($parsed == 0) {sleep(3);
$mech->get("http://www.lordsoflords.com/m3/fight_control.php");
$a = $mech->content();if ($a =~ m/Skeleton/) {$parsed = 1;}}
$mech->form_number(2);
$mech->field("Difficulty", $level);
$mech->click();
$cpm = $mech->content();
$cpm =~ m/(\<option\>208.*Duke)/;
$cpm = $1;
$cpm =~ s/ - Shadowlord Duke//g;
$cpm =~ s/\>209/\>/;
$cpm =~ s/<.*?>//g;
if($debug == 1) {
    print $cpm . "\n";
}
$mech->form_number(1);
$mech->select("Monster", $cpm);
$mech->click();
$a = $mech->content();
$a =~ m/(You win.*exp )/;
$a =~ m/(battle)/;
$a =~ m/(You have been jailed for violating our rules)/;
print $1 . "\n";
my $antal = 500 + int rand (500);
my $antal = 5000;
my $jail;

# REPEAT:
while($antal > 0) {
    sleep($loopwait); #default = 0.3
    $antal = $antal -1;
    $mech->reload();
    $a = $mech->content();
    $b = $a;
    $c = $a;
sub-Fight{
我的($cpm);
$parsed=0;而($parsed==0){sleep(3);
$mech->get(“http://www.lordsoflords.com/m3/fight_control.php");
$a=$mech->content();如果($a=~m/Skeleton/){$parsed=1;}
$mech->表格编号(2);
$mech->field(“难度”,$level);
$mech->click();
$cpm=$mech->content();
$cpm=~m/(\208.*Duke)/;
$cpm=$1;
$cpm=~s/-Shadowlord-Duke//g;
$cpm=~s/\>209/\>/;
$cpm=~s///g;
如果($debug==1){
打印$cpm。“\n”;
}
$mech->表格编号(1);
$mech->选择(“怪物”,$cpm);
$mech->click();
$a=$mech->content();
$a=~m/(你赢了。*exp)/;
$a=~m/(战斗)/;
$a=~m/(您因违反我们的规定而被监禁)/;
打印$1。“\n”;
我的$antal=500+整数兰特(500);
我的$antal=5000;
我的美元监狱;
#重复:
而($antal>0){
睡眠($loopwait)#默认值=0.3
$antal=$antal-1;
$mech->reload();
$a=$mech->content();
$b=$a;
$c=$a;
我得到的一行错误是repeat部分中的$mech->reload()命令,该命令返回的错误如下:“error POSTing:Bad Request at booyaka.pl line 299”

有时还返回此错误“error GETing:无法连接到www.lordsoflords.com:80(错误主机名),位于booyaka.pl第97行”

此附加的功能如下所示:

sub Stealwait {
    $stealwait = 3600;
    $stealtime = time;
    $stealtime = $stealtime + $stealwait; # if stealer can't be found, click for 1k seconds
    print time . "|" . $stealtime . "\n";
    print "stealtime: " . $stealtime . "\n";
    $parsed = 0; $stealcount = 0;
    while ($parsed == 0) {sleep(3);
    print $stealcount . "\n";
    $mech->get("http://www.lordsoflords.com/m3/steal.php");
    $a = $mech->content();
    if ($a =~ m/Parsed/) {$parsed = 1; $stealwait = 0;}
    $stealcount = $stealcount+1; if ($stealcount == 5) {
    }
if ($a =~ m/recover/)
{
    $a = $mech->content();
    $a =~ m/(Take.*This)/s;
    $b = $1;
    $b =~ s/<.*?>//sg;
    $b =~ m/(Take.*seconds)/s;
    $b = $1;
     print $b . "\n";
    $b =~ m/(for.*seconds)/s;
    $b = $1;
    $b =~ s/for//sg;
    $b =~ s/seconds//sg;
    $b =~ s/<.*?>//sg;
    $b =~ s/,//g;
            $b = 2*$b;
            $stealwait = $b;
            print "In recover, gotta wait " . $stealwait . " seconds before I can steal...\n";
            $stealtime = time;
            $stealtime = $stealtime + $stealwait;
    }


    sub Steal {
$parsed = 0; while ($parsed == 0) {sleep(3);
$mech->get("http://www.lordsoflords.com/m3/steal.php");
$a = $mech->content();if ($a =~ m/Parsed/) {$parsed = 1;}}
    $a = $mech->content();
    if ($a =~ m/Freeplay/) { # steal only if we have freeplay
            $a = "\<option\>" . "$stealchar" . ".*?\<\/option\>";
            $tmp = $mech->content();
            #print $tmp;
            if($tmp =~ m/($a)/) {print "Stealer found\n";} else {print "Stealer not found! - not stealing!\n"; return();}
            $tmp =~ m/($a)/s;
            $tmp = $1;
            $tmp =~ s/<.*?>//sg;
            print "Stealing from: " . $tmp;
            $mech->form_name(0);
            $mech->select("Opp", $tmp);
            $mech->click_button('value' => 'Steal Stats or Items');
            $a = $mech->content();
            $a =~ m/(sleepers.*This)/s;
            $b = $1;
            $b =~ s/<.*?>//sg;
            $b =~ s/sleepers//sg;
            $b =~ s/This//sg;
            print $b;
    } else {$stealtime = time; $stealtime = $stealtime + 2000; print "Freeplay not detected, stealing cancelled...\n";}
}
sub Stealwait{
$stealwait=3600;
$stealtime=时间;
$stealtime=$stealtime+$stealwait;#如果找不到stealer,请单击1k秒
打印时间。“|”。$stealtime。”\n”;
打印“stealtime:.$stealtime.\n”;
$parsed=0;$stealcount=0;
而($parsed==0){sleep(3);
打印$stealcount。“\n”;
$mech->get(“http://www.lordsoflords.com/m3/steal.php");
$a=$mech->content();
如果($a=~m/Parsed/){$Parsed=1;$stealwait=0;}
$stealcount=$stealcount+1;如果($stealcount==5){
}
如果($a=~m/recover/)
{
$a=$mech->content();
$a=~m/(拿着这个)/s;
$b=$1;
$b=~s///sg;
$b=~m/(耗时。*秒)/s;
$b=$1;
打印$b。“\n”;
$b=~m/(用于。*秒)/s;
$b=$1;
$b=~s/用于//sg;
$b=~s/s//sg;
$b=~s///sg;
$b=~s/,//g;
$b=2*$b;
$stealwait=$b;
打印“在恢复中,必须等待”。$stealwait。“在我可以偷之前的几秒钟…\n”;
$stealtime=时间;
$stealtime=$stealtime+$stealwait;
}
次偷窃{
$parsed=0;而($parsed==0){sleep(3);
$mech->get(“http://www.lordsoflords.com/m3/steal.php");
$a=$mech->content();如果($a=~m/Parsed/){$Parsed=1;}
$a=$mech->content();
如果($a=~m/Freeplay/){#只有在我们有Freeplay的情况下才偷
$a=“\”“$stealchar”。.*?\”;
$tmp=$mech->content();
#打印$tmp;
if($tmp=~m/($a)/){print“Stealer found\n”}else{print“Stealer not found!-not stealing!\n”;return();}
$tmp=~m/($a)/s;
$tmp=$1;
$tmp=~s///sg;
打印“偷窃:”.$tmp;
$mech->表单名称(0);
$mech->select(“Opp”、$tmp);
$mech->点击_按钮('value'=>'Steal Stats或Items');
$a=$mech->content();
$a=~m/(睡眠者。*此)/s;
$b=$1;
$b=~s///sg;
$b=~s/s//sg;
$b=~s/这个//sg;
打印$b;
}else{$stealtime=time;$stealtime=$stealtime+2000;打印“未检测到免费播放,取消了偷窃…”\n;}
}

对于脚本编写,我不是专家,任何关于如何纠正此问题或覆盖Mechanize超时的见解都将不胜感激。

捕获异常或其他,请稍等,然后重新发送请求。对重试的上限进行硬编码是一种常见的互联网礼节,这样就不会影响服务器。

首先指出Perl代码中的第299行和第97行。添加
使用严格;使用警告;
,修复无疑会出现的大量错误和警告,然后重新发布我们的问题——如果您的问题仍然存在的话。毫无疑问,大多数错误都与使用显式包名有关,这可以通过在所使用的块中使用
my$foo
声明变量来解决。另外,不要使用
$a
$b
,因为它们是为
sort
函数保留的。299是第一个块,$mech->reload()行,在#REPEAT部分,就像我在我的原始文章中写的那样。99是第一个$mech->get(“);从第二段代码开始,我最初并没有写它,我只是想让它为我工作,整个脚本都使用了严格和警告。毫无疑问,脚本的所有变量都在顶部声明。看一下代码,我会说,如果它真的行得通,那主要是出于旧习惯或纯粹的运气。为了知道为什么你的帖子/get失败,您需要检查post/get的外观。我想您已经阅读了Mechanize模块的文档?我以前访问过该网站,我确实记得读过一些关于“注销原因”的内容"正在以超过每秒一次的速度执行请求。是的,您是正确的,但是此脚本以前在内置请求cap的服务器中运行良好。shell脚本中设置了一个loopwait变量,用于调整重新加载的等待时间。这与我找不到已加载的PXPerl版本有关最初随脚本一起提供?我已经从我的包管理器中自行编译了一长串lib和模块,但是否有可能我缺少了处理这种可能存在的东西?我们谈论的就像是最初使用的8年前版本的PXPerl。