2016-03-01 20 views
3

我尝试使用WWW :: Mechanize来自动化与GeoServer的会话。在GeoServer上使用WWW :: Mechanize时会话过期

GeoServer带有一个REST API,可以使用curl。但目前,使用REST API为ImageMosaicJDBC创建数据存储是不可能的,所以我想用Perl脚本添加新的栅格数据源。它基于WWW :: Mechanize。

,但它失败,此消息:

your session has expired. 

脚本略低于...

#!/usr/bin/perl 

use strict; 
use warnings; 

use WWW::Mechanize; 
use HTML::TreeBuilder; 
use HTML::Tree; 
use Getopt::Long; 
use HTTP::Cookies; 

my %CONF = (
    username  => 'admin', 
    password  => 'geoserver', 
); 

GetOptions(\%CONF, "username=s", "password=s") or die "Bad options"; 

my $netloc = "193.55.67.151:8080"; 
my $url  = "http://$netloc/geoserver/web/?wicket:bookmarkablePage=:org.geoserver.web.GeoServerLoginPage"; 

my $cookie_jar = HTTP::Cookies->new; 
my $agent  = WWW::Mechanize->new(cookie_jar => $cookie_jar); 
$agent->agent('User-Agent=Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:44.0) Gecko/20100101 Firefox/44.0'); 

# auth 
$agent->get($url); 
die $agent->res->status_line unless $agent->success; 
$agent->set_fields(%CONF); 
$agent->submit; 
die $agent->res->status_line unless $agent->success; 

# adding data store 
$url = "http://$netloc/geoserver/web?wicket:bookmarkablePage=:org.geoserver.web.data.store.NewDataPage"; 
my $content = $agent->get($url); 
die $agent->res->status_line unless $agent->success; 
my $tree = HTML::Tree->new(); 
$tree->parse($content); 
print $agent->content; 

# storeform 
$url = "http://$netloc/geoserver/web/?wicket:interface=:5:storeForm::IFormSubmitListener::"; 
my $content = $agent->post($url); 
die $agent->res->status_line unless $agent->success; 
my $tree = HTML::Tree->new(); 
$tree->parse($content); 
print $agent->content; 

# newdatapage 
$url = "http://$netloc/geoserver/web/?wicket:interface=:6::::"; 
my $ref = "http://$netloc/geoserver/web/?wicket:bookmarkablePage=:org.geoserver.web.data.store.NewDataPage"; 
my $content = $agent->get($url, referer => $ref); 
die $agent->res->status_line unless $agent->success; 
my $tree = HTML::Tree->new(); 
$tree->parse($content); 
print $agent->content; 

我不能看到那里的问题来自......我特别使用WireShark检查HTTP交换,但是对我来说,每件事都可以。 JSESSIONID cookie是例如正确的救援。

+0

在哪个步骤的程序? –

回答

0

尝试设置超时参数,同时声明$代理