如何在Perl中发送此SOAP XML?

时间:2009-10-01 20:04:43

标签: xml perl soap client

我必须发送以下XML。我不知道从哪里开始。我知道我需要在Perl中查找SOAP,但大致就是这样。

<xs:element name="CheckDomain"> 
<xs:complexType> 
<xs:sequence> 
<xs:element name="domain" type="domainRef"/> 
<xs:element name="suggestions" type="xs:boolean" default="false" minOccurs="0"/> 
</xs:sequence> 
</xs:complexType> 
</xs:element>

5 个答案:

答案 0 :(得分:4)

从哪里开始?开始阅读SOAP::Lite的文档;有更多扩展的SOAP处理库here

如果您需要更多帮助,可以在某些earlier questions on SOAP at Stackoverflow.

中找到所需内容

答案 1 :(得分:1)

您发布的XML代码段看起来像XSD架构。它描述了以下XML:

<CheckDomain xmlns="...">
 <domainRef>...</domainRef>
 <suggestions>true</suggestions> <!-- or it could be "false" -->
</CheckDomain>

您提供的代码段没有说明CheckDomain需要什么命名空间,或者应该在domainRef中包含什么。您需要整个XSD文档。

此外,如果没有看到服务的WSDL文件,就无法告诉如何将其转换为有效的SOAP消息。 (假设您正在处理真正的SOAP服务,而不仅仅是处理使用XSD架构描述其输入的REST或XML-RPC服务)。

SOAP的优点在于您通常不必手动执行任何操作。您只需获得正确的工具并将其指向服务发布的WSDL和XSD文件,您就会自动生成正确的类。

答案 2 :(得分:0)

好吧,你可以在CPAN上获取HTTP客户端,然后只使用&lt;&lt; (这里的文件)用(XML编码值)插值变量来发送请求。然后你需要解析响应。

Perl应该有一个SOAP客户端,但这不是我遇到的组合。

有趣的问题。祝WSDL大肆宣传: - )

答案 3 :(得分:0)

检查以下网址,了解如何使用perl发送soap消息:

http://users.skynet.be/pascalbotte/rcx-ws-doc/perlpost.htm

saludos,

答案 4 :(得分:0)

使用LWP::UserAgent,它是实现Web用户代理的类。 LWP::UserAgent对象可用于调度Web请求。

use strict;
use LWP::UserAgent;
use HTTP::Request;

my $message = "<?xml version=\"1.0\" encoding=\"utf-8\"?>
               <soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" 
                xmlns:ecn=\"http://www.alcatel.com/ecn_csa/EcnServices.wsdl\">
               <soapenv:Body>
               <ecn:GetBusinessAccount>
               <accountNumber>$number</accountNumber>
               </ecn:GetBusinessAccount>
               </soapenv:Body>
               </soapenv:Envelope>";
my $userAgent = LWP::UserAgent->new();
my $request = HTTP::Request->new(POST => 'http://server:port/endpoint');
# $request->header(SOAPAction => '""'); #use it if required
$request->content($message);
$request->content_type("text/xml; charset=utf-8");
my $response = $userAgent->request($request);
# $response->code == 200
print $response->as_string;