我正在尝试解析Jenkins作业“ config.xml”文件。
这是我尝试使用 HTTP :: Tiny 的一种方法:
use HTTP::Tiny;
my $page = "http://localhost:8080/job/Job_One_Name/config.xml";
system("start $page"); # this loads the xml file in browser successfully
my $wsdlResponse = HTTP::Tiny->new->get($page);
$wsdlResponse->{success} or die print $logger->error_die($!);
my $wsdlXML = XML::LibXML->new->parse_file($wsdlResponse->{content});
print $wsdlXML;
它死于错误 “错误的文件描述符” 。
如果我注释掉该行,则脚本在parse_file行处中断,并显示以下错误消息:
Could not create file parser context for file "<html><head><meta http-equiv='refresh' content='1;url=/login?from=%2Fjo
b%2FJob_One_Name/config.xml'/><script>window.location.replace('/login?from=%2Fjob%2FJob_One_Name/config.xml');</script></head><body style='background-color:white; color:white;'>
Authentication required
<!--
You are authenticated as: anonymous
Groups that you are in:
Permission you need to have (but didn't): hudson.model.Hudson.Read
... which is implied by: hudson.security.Permission.GenericRead
... which is implied by: hudson.model.Hudson.Administer
-->
</body></html>
": Result too large at Job.pm line 67.
我也从不同的示例在线尝试了 XML :: Twig 和 LibXML- > load_xml和 load_html
,但是它们都死于类似于 “无法为文件创建文件解析器上下文” , “错误的文件描述符” 或 “指定 ”的错误。 位置,字符串或IO” 。
关于可能是什么的任何想法?提前致谢。
更新:
遵循詹金斯(Jenkins)的“ 身份验证脚本客户 端”中的“脚本客户端的Perl
LWP示例
” ,我已经成功地进行了身份验证:
my $uagent = LWP::UserAgent->new(cookie_jar => HTTP::Cookies->new());
my %options = {'myUserName' => 'myPassword'};
$req = HTTP::Request->new( GET => $serverHost );
$req->authorization_basic( 'myUserName', 'myPassword' );
my $res = $uagent->request($req);
# Check the outcome of the response
print "Result: " . $res->status_line . "\n";
print $res->headers->as_string;
print "\n";
if ( !$res->is_success ) {
print "Failed\n";
} else {
print "Success!\n";
# Parse XML
my $wsdlResponse = HTTP::Tiny->new->get($page, \%options);
#$dom = XML::LibXML->load_xml(location=>$page);
#print $dom . "\n";
my $wsdlXML = XML::LibXML->new->parse_file($wsdlResponse->{content});
print $wsdlXML;
#print $res->content, "\n";
}
它仍然给我同样的 “需要身份验证” 错误。我不知道如何使用成功的授权请求来解析文件。
我想出了一种使用经过身份验证的请求输出结果的方法。由于请求输出xml内容以及标头响应,即:
HTTP/1.1 200 OK
Connection: close
Server: Jetty(8.y.z-SNAPSHOT)
Content-Type: application/xml
Client-Date: Wed, 30 Jul 2014 14:49:12 GMT
Client-Peer: 127.0.0.1:8080
Client-Response-Num: 1
<?xml version...
<project>
....
....
</project>
我使用正则表达式 仅 提取输出的xml部分并将其保存到文件中。从那里,我使用LibXML的 parse_file
方法来解析新写入的文件。(我有一个单独的子例程,该例程使用 findnodes
方法提取我想提取的特定节点。由于该解决方案处理了我遇到的身份验证问题,所以我没有发布它)。
解:
use strict;
use warnings;
use XML::LibXML;
use Path::Class;
use LWP;
use HTTP::Cookies;
my $serverXmlUrl = "http\://localhost:8080/job/jobName/config.xml";
my $uagent = LWP::UserAgent->new(cookie_jar => HTTP::Cookies->new());
my $request = HTTP::Request->new( GET => $serverXmlUrl );
$request->authorization_basic( 'UserName', 'Password' );
my $result = $uagent->request($request);
if ( !$result->is_success ) {
print "Failed\n";
} else {
print "Success!\n";
# Create new file to write to
my $dir = dir(".");
my $file = $dir->file("job.xml");
my $file_handle = $file->openw();
my $xml_content = $result->as_string; # full result output
# Regex to store only xml content
$xml_content =~ s/.*(<\?xml.*)/$1/s;
# Save xml_content to file
$file_handle->print($xml_content);
$file_handle->close();
# Parse newly written file
print "Parsing file... \n";
my $parser = XML::LibXML->new();
my $doc = $parser->parse_file($file);
print $doc;
}
问题内容: 我收到错误 NOAUTH必需的身份验证 。我的laravel版本是5.3,我正在使用predis 1.1.1连接redis。 在etc / redis / redis.conf中,我有: 在.env文件中 在config / database.php中,我有: 我通过以下方式连接redis: 并像这样使用它: 因此,当我注释掉并将密码发送为null时,它可以工作,但在密码到位后却无法工
我们正在开发一个iOS应用程序,它使用谷歌来验证firebase。根据https://www . Firebase . com/docs/IOs/guide/user-auth . html # section-log in Firebase说,auth令牌每24小时过期一次。我们想知道以下场景是否是我们需要考虑的: 用户通过Google和Firebase进行身份验证 我们的应用程序将获得一个24
问题内容: 我正在使用Python在系统级别的Linux中进行项目。因此,我想知道,如果我以普通用户身份运行代码,并且正在访问系统文件,那么它应该具有root权限,那么我如何提示输入root密码并以超级用户身份运行其他代码。我想知道,如何以超级用户身份以密码提示运行python脚本。 任何帮助将不胜感激。先感谢您.. 问题答案: 您可以做的另一件事是,如果脚本不是以root身份执行的,则脚本会自动
我遵循了GitHub教程中的所有内容:https://help.github.com/articles/generating-ssh-keys 我在存储库的目录中执行了所有命令。我成功到达教程的末尾,并收到消息:“嗨,用户名!你已成功通过身份验证,但 GitHub 不提供外壳访问。 然而,当我尝试做推送之类的事情时,它仍然要求输入我的用户名和密码。
我对Web浏览器的基本身份验证有点困惑。我原以为Web浏览器只会在之前的响应中收到HTTP 401状态后发送授权标头。然而,似乎Chrome在之后的每个请求中都发送授权标头。它包含我曾经输入的数据,以响应我网站上的401,并与每条消息一起发送(根据Chrome和我的Web服务器附带的开发人员工具)。这是预期的行为吗?我应该在我的401中使用一些标头来推断不应该缓存授权内容吗?我目前正在使用WWW-
身份验证驱动程序/"Multi-Auth" 在laravel 5.2发布之前,已经声明多授权支持出箱。但是没有任何示例代码显示如何使用不同的驱动程序进行身份验证。所以我需要帮助设置多身份使用默认laravel 5.2