gpt4 book ai didi

perl - 在 GeoServer 上使用 WWW::Mechanize 时 session 过期

转载 作者:行者123 更新时间:2023-12-02 04:43:09 28 4
gpt4 key购买 nike

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

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 正确地进行了救援。

最佳答案

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

关于perl - 在 GeoServer 上使用 WWW::Mechanize 时 session 过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35726626/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com