Perl SOAP::WSDL访问HTTPS未加密错误
我正在尝试生成一个Perl库来连接到Web服务。此Web服务位于HTTPS服务器中,我的用户可以访问它 我已经使用不同的选项执行了多次wsdl2perl.pl,它总是失败,并显示以下消息:Perl SOAP::WSDL访问HTTPS未加密错误,perl,soap,https,wsdl,Perl,Soap,Https,Wsdl,我正在尝试生成一个Perl库来连接到Web服务。此Web服务位于HTTPS服务器中,我的用户可以访问它 我已经使用不同的选项执行了多次wsdl2perl.pl,它总是失败,并显示以下消息:Unauthorized at/usr/lib/perl5/site\u perl/5.8.8/SOAP/WSDL/Expat/Base.pm第73行。 问题是,当我不将user/pass作为参数提供时,它甚至不要求它们 我读过[SOAP::WSDL::Manual::Cookbook](http://sear
Unauthorized at/usr/lib/perl5/site\u perl/5.8.8/SOAP/WSDL/Expat/Base.pm第73行。
问题是,当我不将user/pass作为参数提供时,它甚至不要求它们
我读过[SOAP::WSDL::Manual::Cookbook](http://search.cpan.org/~mkutter/SOAP-WSDL-2.00.10/lib/SOAP/WSDL/Manual/Cookbook.pod)并完成了关于HTTPS的说明:Crypt::SSLeay已安装,SOAP::WSDL::Transport::HTTP和SOAP::Transport::HTTP都已修改
您是否可以就可能出现的问题给出任何提示?您是否可以从web浏览器自由访问WSDL文件? 您网络中的其他人可以毫无问题地访问它吗
可能承载WSDL文件的web服务器需要基本或其他类型的身份验证…如果没有必要,我不建议您使用perl作为web服务客户端。正如您所知,perl是一种开放源代码语言,虽然它支持soap协议,但它的支持似乎不是很标准。首先,它的文档不是很清楚。而且,它的支持有时是有限的。最后,bug总是到处存在
因此,如果您必须使用wsdl2perl,您可以使用komodo进入代码以了解发生了什么。这正是我在使用perl作为web服务客户端时所做的。您知道,https的后面是SSL,因此,如果您的SSL基于经授权的证书,你必须设置你的证书路径和可信服务器证书列表。你最好使用基于linux的firefox进行测试。正如我所知,你可以设置firefox的证书路径和firefox的可信证书列表。如果firefox能够成功地与你的web服务服务器通信,那么,现在是调试perl客户端的时候了。要使用perl和SOAP调试情况,请插入web代理,以便您可以准确地看到正在传递的数据以及从服务器返回的响应。我想您得到的401未经授权,但服务器响应中可能有更多细节
Fiddler和Charles proxy都可以做到这一点。您引用的错误消息似乎来自这一行:
die$response->message()代码>
在HTTP世界中,Unauthorized
显然是错误代码401,这意味着您的网站需要用户名和密码(很可能,某些网站可能会“劫持”此错误代码以满足其他条件,如源IP上的过滤器)。
有吗
如果是这样,你可以
- 运行
wdsl2perl
后,在调用set_proxy()
的已创建文件中查找,并在其中更改URL以包括用户名和密码,如下所示:…->set_proxy(
)http://USERNAME:PASSWORD@www.example.com/…')
SOAP::WSDL
对象后,对其调用服务(SERVICENAME)
(对于您在WSDL文件中定义的每个服务),这将为您提供一个新对象,您可以在该对象上调用传输()
,以访问可以调用代理()的底层传输对象
,URL的格式如上所述(是的,这里是proxy()
,上面是set\u proxy()
);或者调用credentials()
而不是proxy()
,然后传递4个字符串:
我真的很抱歉您的兴趣,但我想不起当时我在做什么。查看我的日志,似乎我被命令连接到Sharepoint WS以检索一些信息,所以现在我想我需要NTLM auth。这个项目早就结束了,所以我真的很抱歉你的努力。