我正在尝试使用已经存在且完美运行的Web服务.在阅读了许多教程和示例之后,我终于设法从服务器获得了答案:
服务器无法处理请求.你调用的对象是空的
WS只允许您从NT登录中获取和ID(一个字符串参数,一个字符串答案).
这是我的perl脚本:
#!perl -w
use strict;
use warnings;
use LWP::UserAgent;
use SOAP::Lite on_action => sub { "$_[0]$_[1]"; };
use LWP::Debug; LWP::Debug::level('+'); SOAP::Lite->import(+trace => 'all');
#use SOAP::Lite +trace => 'debug';
#sub SOAP::Transport::HTTP::Client::get_basic_credentials { return ('user' => 'pwd') };
use Data::Dumper;
my $var = SOAP::Data->new(name => 'NTLogin', value => "1234", type =>'s:string');
my $resultLogin = SOAP::Lite
-> uri('http://xxxxx')
-> proxy('http://yyyyy/zzzzz/directory.asmx')
-> on_action( sub { join '/', @_ } )
-> GetUIDFromNTLogin($var);
print "lets test it...\n\n";
print $resultLogin;
print "\nresult():\n";
print …Run Code Online (Sandbox Code Playgroud) 我正在使用Perl SOAP::Lite来访问由WSDL定义的远程Web服务.这意味着我有:
use strict;
use Data::Dumper;
use SOAP::Lite +trace => 'debug';
my $service = SOAP::Lite->service('http://path/wsdl');
Run Code Online (Sandbox Code Playgroud)
好到目前为止.问题是我需要访问HTTP::Request对象以发送自定义HTTP请求标头(我不是在谈论身份验证标头).看起来我可以在成功调用后访问请求对象:
my $result = $service->getClient('parameters');
print Dumper($service->transport->http_request);
Run Code Online (Sandbox Code Playgroud)
那会给我正确的HTTP::Request对象:
$VAR1 = bless( {
'_content' => '',
'_uri' => undef,
'_headers' => bless( {}, 'HTTP::Headers' ),
'_method' => undef
}, 'HTTP::Request' );
Run Code Online (Sandbox Code Playgroud)
如果我在执行autoDispatch($service->getClient部件)之前尝试访问请求对象,则传输对象为空,我无法修改请求.如果我SOAP::Lite->proxy顺便说一句,似乎一切都会正常工作- 但这会破坏预先定义的服务定义的有用性.
任何想法,我想如何从服务定义访问请求对象,而不必先打电话?鸡蛋和鸡蛋问题真的......
谢谢!
我使用perl soap :: lite来构建一个Web服务客户端.该实现适用于简单方法,例如需要单个标量参数.EG,以下工作正常.
#!/usr/bin/perl
use warnings;
use SOAP::Lite +trace=>debug;
use strict;
use Data::Dumper;
$SOAP::Constants::PREFIX_ENV = 'SOAP-ENV';
my $base="https://XXXX:60001/GDBIncidentWebService/Config?wsdl&style=rpc";
my $user="XXXX";
my $pwd="XXXX";
my $lite = SOAP::Lite -> readable(1)
-> service($base) ;
my @res=$lite->readIncident("123456");
print Dumper(\@res);
exit;
sub SOAP::Transport::HTTP::Client::get_basic_credentials { return $user => $pwd ; }
Run Code Online (Sandbox Code Playgroud)
我需要调用一个需要更复杂的参数集的方法(一些标量加一个键值对数组).我想我应该使用SOAP :: Data模块正确地序列化我的数据但是无法使它工作.即使是"简单"的方法(如上所述)似乎也不起作用.EG(仅显示从上面的脚本更改的行):
my $arg= SOAP::Data->new()->type('xs:string')-> value("20054106");
my @res=$lite->readIncident($arg);
Run Code Online (Sandbox Code Playgroud)
产量:
String value expected instead of SOAP::Data reference
Run Code Online (Sandbox Code Playgroud)
有关如何解决此问题的任何想法?非常感谢 !这里参考的是我脚本中调用的方法的wsdl
<wsdl:operation name="readIncident">
<soap:operation soapAction=""/>
<wsdl:input>
<soap:body use="literal" namespace="urn:GDBIncidentWebServiceVi" parts="ticketID "/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal" namespace="urn:GDBIncidentWebServiceVi"/> …Run Code Online (Sandbox Code Playgroud) 我想迁移我的应用程序使用的perl库(SOAP :: Lite).为了尽可能顺利地为最终用户进行迁移,我想让这个库的两个版本(旧版本和新版本)并行工作.
目标是让最终用户随时随地迁移他们的脚本(如果需要).所以基本上,对于旧脚本,用户无需更改,新脚本将使用新版本编写.
有谁知道继续前进的方法?
我正在编写一个与Five9 API一起使用的Web应用程序。我有一个有效的PHP脚本,该脚本使用API来打印出第一个用户的电子邮件。我的应用程序在Perl中,并且我正尝试避免将其外壳到PHP脚本中。我尝试使用SOAP :: Lite,但遇到了困难。这是我的工作PHP脚本。
#!/usr/bin/php
<?php
$soap = null;
$wsdl = "https://api.five9.com/wsadmin/v2/AdminWebService?wsdl";
$user = "johnsmith@example.com";
$pass = "password";
$soap_options = array("login" => $user, "password" => $pass, "trace" => 1);
$soap = new SoapClient($wsdl, $soap_options);
$arryParams['userNamePattern'] = '';
$result = $soap->getUsersInfo($arryParams);
if(isset($result->return)) {
$objRecords = $result->return;
print $objRecords[0]->generalInfo->EMail;
print "\n";
}
?>
Run Code Online (Sandbox Code Playgroud)
到目前为止,这是我在perl和SOAP :: Lite上的工作
#!/usr/bin/env perl
use warnings;
use strict;
use MIME::Base64;
use Data::Dumper;
use SOAP::Lite +trace => [ transport => sub { print $_[0]->as_string } ];
my $wsdl_five9 = …Run Code Online (Sandbox Code Playgroud) 我用以下代码敲击肥皂api.我的目标是创建一个包含自定义字段的票证.如果您注释掉自定义字段部分,则此代码可以正常工作.知道发生了什么事吗?
码
my $soap = SOAP::Lite->service($wsdl);
my $token = $soap->login($_jira_user,$_jira_pass);
my $customFields = [
{'customFieldId' => $_cf_map{'severity'},'values' => [SOAP::Data->type('string', $severity)]},
{'customFieldId' => $_cf_map{'outage_start'}, 'values' => [SOAP::Data->type('string', $start)]},
{'customFieldId' => $_cf_map{'no_auto_close'}, 'values' => [SOAP::Data->type('string', $no_auto_close == 1 ? 'Yes': 'No')]},
{'customFieldId' => $_cf_map{'nco_serials'}, 'values' => [SOAP::Data->type('string', $serial_string)]},
{'customFieldId' => $_cf_map{'services'}, 'values' => \@services},
];
my $remoteIssueHash = {
'project' => SOAP::Data->type('string' => $_projectkey),
'type' => SOAP::Data->type('string' => $_issuetype),
'summary' => SOAP::Data->type('string' => $summary),
'reporter' => SOAP::Data->type('string' => $user),
'assignee' => SOAP::Data->type('string' …Run Code Online (Sandbox Code Playgroud) 我在编写 SOAP/XML 客户端以与一家名为 Domainbox 的公司提供的 API 对话时遇到问题。我正在使用 SOAP::Lite 模块/库在 Perl 中编写客户端。我收到以下错误消息:
可能的 SOAP 版本不匹配:Envelope 命名空间http://schemas.xmlsoap.org/soap/envelope/是意外的。期待http://www.w3.org/2003/05/soap-envelope。
这是因为库使用 SOAP 1.1 命名空间发送 SOAP 信封,而服务器需要 SOAP 1.2。
但是我想不出一个解决方案,我已经尝试明确设置 $soap->soapversion('1.2'); 在 SOAP::Lite 对象中,但这只会影响响应消息中收到的信封,而不影响客户端发送的信封。
服务器正在运行 ASP.net 并且似乎不想接受 SOAP 1.1 版消息。
默认情况下,查询soapversion() 方法返回1.1 版,当我将其更改为1.2 时,它返回1.2,但在内部它显然在某处忽略了这一点。
WSDL 似乎没有正确定义 xmlns:soap 或 xmlns:soap12 但 SOAP::Lite 也没有使用这些命名空间。我会提供一个链接,但我不能在这里发布两个以上的链接。
我也尝试使用 SOAP::Lite 的 service() 方法,但这根本没有区别。
这是我正在使用的代码:
#!/usr/bin/perl -w
use strict;
use SOAP::Lite;
use Data::Dumper;
### API Info
my $reseller = 'Removed';
my $username = 'Removed';
my $password = 'Removed';
my …Run Code Online (Sandbox Code Playgroud) 这是我的第一个Perl脚本.我已经使用CPAN安装了SOAP :: Lite,它似乎已经没问题了.
我正在尝试访问一个简单的HelloWorld .NET Web服务.我收到的错误似乎与Perl或SOAP :: Lite无法验证SSL证书有关.
虽然它看起来像是返回500的代码,但是我创建了一个能够很好地调用web方法的Java客户端,所以我认为问题不在Web服务端.
任何人都可以指出我正确的方向,我将如何工作?
#!/usr/bin/perl
use SOAP::Lite 'trace', 'debug';
$api_ns = "https://www.mydomain.com/edgedev/";
$api_url = "https://www.mydomain.com/edgedev/ws.asmx";
$action = "HelloWorld";
my $soap = SOAP::Lite
-> readable(1)
-> ns($api_ns, 'tns')
-> proxy($api_url)
-> on_action(sub { return "\"$action\""});
print $soap->HelloWorld()->result;
Run Code Online (Sandbox Code Playgroud)
<soap:Envelope
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:tns="https://www.mydomain.com/edgedev/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<tns:HelloWorld xsi:nil="true" />
</soap:Body>
</soap:Envelope>
SOAP::Transport::HTTP::Client::send_receive: 500 Can't connect to www.mydomain.com:443 (certificate verify failed)
Content-Type: text/plain
Client-Date: Tue, 12 Feb 2013 16:40:28 GMT
Client-Warning: Internal response
Can't connect …Run Code Online (Sandbox Code Playgroud) 我是客户端 - 我希望调用Web服务的方法.
我有一个Web服务地址(.svc后缀),我有方法的名称,返回值和他们的参数.
该服务使用WCF(HTML端点)实现.我想把这些方法称为SOAP::Lite.我应该为URI,代理以及如何调用方法编写什么?
perl ×9
soaplite ×9
soap ×4
web-services ×3
wsdl ×2
client-side ×1
cpan ×1
five9 ×1
jira ×1
perl-module ×1
php ×1
soap-client ×1
xml ×1