Perl SOAP :: WSDL访问HTTPS未经授权的错误

时间:2011-10-21 08:47:36

标签: perl soap https wsdl

我正在尝试生成一个Perl库来连接到WebService。此Web服务位于HTTPS服务器中,我的用户可以访问它。

我已经多次使用不同的选项执行了wsdl2perl.pl,但它总是失败并显示以下消息:Unauthorized at /usr/lib/perl5/site_perl/5.8.8/SOAP/WSDL/Expat/Base.pm line 73. 问题是,当我不将我的用户/传递作为参数时,它甚至不会要求它们。

我读过[SOAP :: WSDL :: Manual :: Cookbook](http://search.cpan.org/~mkutter/SOAP-WSDL-2.00.10/lib/SOAP/WSDL/Manual/Cookbook .pod)并完成了关于HTTPS的说法:Crypt :: SSLeay是instaleld,SOAP :: WSDL :: Transport :: HTTP和SOAP :: Transport :: HTTP都被修改。

你能否提出任何可能出错的提示?

4 个答案:

答案 0 :(得分:0)

您可以从Web浏览器自由访问WSDL文件吗? 你网络中的其他人可以毫无问题地访问它吗?

托管WSDL文件的Web服务器可能需要Basic或其他类型的身份验证...

答案 1 :(得分:0)

如果没有必要,我不建议您使用perl作为Web服务客户端。如您所知,perl是一种开源语言,虽然它支持soap协议,但它的支持似乎不是很标准。起初,它的文档不是很清楚。而且,它的支持有时是有限的。最后,bug总是存在。

所以,如果你必须使用wsdl2perl,你可以使用komodo进入代码来找出发生了什么。这就是我以前用perl作为web服务客户端时所做的事情。你知道,在后面https是SSL,因此,如果您的SSL基于证书授权,您必须设置您的证书路径和可信服务器证书列表。您最好使用基于Linux的Firefox来进行测试。我知道,你可以设置firefox的cert路径和firefox的可信证书列表。如果firefox可以成功地与你的web服务器通信,那么,是时候调试你的perl客户端了。

答案 2 :(得分:0)

要使用Perl和SOAP调试情境,请插入Web代理,以便您可以准确地查看正在传递的数据以及从服务器返回的响应。我期待你获得401未授权,但服务器响应中可能有更多细节。

Fiddler http://docs.telerik.com/fiddler和Charles代理https://www.charlesproxy.com/都可以做到这一点。

答案 3 :(得分:0)

您引用的错误消息似乎来自以下行: die $response->message() if $response->code() ne '200'; 在HTTP世界中,Unauthorized显然是错误代码401,这意味着您的网站要求输入用户名和密码(最有可能的是,某些网站可能会“劫持”此错误代码以满足其他条件,例如来源上的过滤器IP)。 你有他们吗?

如果是这样,你可以

  • 运行wdsl2perl后,在创建的文件中找到调用set_proxy()的位置并更改其中的网址,以包含用户名和密码:...->set_proxy('http://USERNAME:PASSWORD@www.example.com/...')
  • 或您的代码,在实例化SOAP::WSDL对象后,在其上调用service(SERVICENAME)(对于您在WSDL文件中定义的每个服务),这将为您提供一个新对象,您可以在其上调用transport()访问基础传输对象,您可以使用上面格式化的网址调用proxy()(是的,此处为proxy(),上方为set_proxy());或者您拨打credentials()而不是proxy()并传递4个字符串:
    1. '主机名:端口'
    2. 这个领域,由网络服务器给出,但我认为你可以放任何东西
    3. 用户名
    4. 密码