[英]How do I send this SOAP XML in Perl?
我必须在下面发送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>
从哪儿开始? 开始阅读SOAP :: Lite的文档; 还有更广泛的SOAP处理库在这里 。
如果您需要更多帮助,可以在Stackoverflow上的SOAP早期问题中找到所需的内容。
您发布的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文件,您就会自动生成能够正确执行的类。
好吧,你可以在CPAN上获得一个HTTP客户端,然后只需使用带有(XML编码值)插值变量的<<(here documents)来发送请求。 然后你需要解析响应。
Perl应该有一个SOAP客户端,但这不是我遇到过的组合。
但有趣的问题。 WSDL打击时好运:-)
使用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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.