Perl SOAP::WSDL访问HTTPS未加密错误

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

我正在尝试生成一个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://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个字符串:
  • '主机名:端口'
  • 领域,正如Web服务器所给出的,但我认为您可以放置任何内容
  • 用户名
  • 密码

  • 我真的很抱歉您的兴趣,但我想不起当时我在做什么。查看我的日志,似乎我被命令连接到Sharepoint WS以检索一些信息,所以现在我想我需要NTLM auth。这个项目早就结束了,所以我真的很抱歉你的努力。