[Geoserver-users] problem using www::mechanize with geoserver for ImageMosaicJDBC

Hello everybody,

I try to use a Perl module, www::mechanize, in order to automatise a session with geoserver.

I do that because it is impossible to create a datastore for ImageMosaicJDBC with the REST API, so i would like to add the new raster data source with a Perl script.
but it fails, with this message : your session has expired.

May you help me, please ? the script is just below...

#!/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.5x.6x.15x: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;
print $cookie_jar->as_string;

# 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;

I cannot see where the problem comes from...
In particular, i used WireShark to inspect the HTTP exchanges, but every thing was ok for me.
The JSESSIONID cookie was for example correctly rescueing.

Thanks in advance.

Ernest.

--
Ernest CHIARELLO - Ernest.Chiarello@anonymised.com
UMR6049 ThéMA - Théoriser et Modéliser pour Aménager
CNRS / université de Bourgogne Franche-Comté
32 rue Mégevand 25030 BESANÇON Cedex

Tel : 03 81 66 54 80 Mob : 07 82 99 11 08