首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在GeoServer上使用WWW::Mechanize时会话过期

在GeoServer上使用WWW::Mechanize时会话过期
EN

Stack Overflow用户
提问于 2016-03-01 23:17:23
回答 1查看 77关注 0票数 3

我尝试使用WWW::Mechanize来自动化与GeoServer的会话。

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

但它失败了,并显示以下消息:

代码语言:javascript
复制
your session has expired.

脚本就在下面...

代码语言:javascript
复制
#!/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正确地拯救了。

EN

回答 1

Stack Overflow用户

发布于 2017-01-28 23:48:08

在声明$agent时尝试设置超时参数

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35726626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档