首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SOAP:Lite无法连接到主机

SOAP:Lite无法连接到主机
EN

Stack Overflow用户
提问于 2022-01-22 09:47:33
回答 2查看 159关注 0票数 0

昨天,我尝试编写一个脚本,将数据发送到一个网站,但我遇到了一个奇怪的错误,即我解决了

我用windows cmd安装了这个perl模块(没有按顺序):

代码语言:javascript
复制
cpanm MIME::Base64
cpanm MIME::Parser
cpanm MIME::Tools
cpanm Test::XML
cpanm SOAP::Lite
cpanm SOAP::WSDL
cpan App::cpanminus

这是我的旧脚本(caching.pl):

代码语言:javascript
复制
#!/usr/bin/perl

use MIME::Base64 ();

use SOAP::Lite ();

open( FILE, 'my.torrent' ) or die "$!";

while( read( FILE, $buf, 60*57 ) ) { $tor .= MIME::Base64::encode( $buf ); }
close( FILE );

$infoHash = SOAP::Lite->service( 'http://itorrents.org/api/torrage.wsdl' )->cacheTorrent( $tor );

print $infoHash;

我遇到了这个错误(我解决了):

代码语言:javascript
复制
Service description 'http://itorrents.org/api/torrage.wsdl' can't be loaded: 500 Can't connect to itorrents.org:443

我通过从torrage.wsdl下载http://itorrents.org/api/torrage.wsdl来解决问题,并替换了这一行(旧的caching.pl脚本):

代码语言:javascript
复制
$infoHash = SOAP::Lite->service( 'http://itorrents.org/api/torrage.wsdl' )->cacheTorrent( $tor );

使用这一行(而不是位于网站中的torrage.wsdl,我尝试用我下载的torrage.wsdl文件所在位置的pc路径替换它):

代码语言:javascript
复制
$infoHash = SOAP::Lite->service( 'C:\Users\sussq\Desktop\perl2exe\torrage.wsdl' )->cacheTorrent( $tor );

但现在我遇到了这个错误:

代码语言:javascript
复制
Service description 'C:\Users\sussq\Desktop\perl2exe\torrage.wsdl' can't be loaded: 501 Protocol scheme 'c' is not supported

有人知道怎么解决这个问题吗?提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-22 14:46:45

您调用的service()方法的定义在SOAP的文档::Lite中给出如下:

服务(服务URL) $client->service('http://svc.perl.org/Svc.wsdl');

因此,需要传递给方法的参数是URL -- WSDL文件的地址。

最初,您将URL - http://itorrents.org/api/torrage.wsdl传递给它。但是,由于某些原因,这是行不通的(从你的答案,似乎你已经找到了问题的根本)。

因此,您在本地保存了WSDL文件,并将本地文件的位置传递给方法。这不起作用,因为'C:\Users\sussq\Desktop\perl2exe\torrage.wsdl‘不是一个有效的URL。

URL的第一部分(冒号之前的位)是‘协议’。这意味着它定义了用于检索此资源的机制。在基于web的URL中,要么是'http‘,要么是'https’。您试图传递给该方法的本地路径与'c:‘比率很高,因此该方法认为这是一个协议。但这不是它所知道的,所以你会得到你的错误信息。

有一种将URL构建到本地文件的机制。这叫做文件:协议。我不是Windows方面的专家,但我认为您的URL应该是:

代码语言:javascript
复制
file:///C:/Users/sussq/Desktop/perl2exe/torrage.wsdl
票数 4
EN

Stack Overflow用户

发布于 2022-01-22 18:36:23

需要一个URI,并且

代码语言:javascript
复制
C:\Users\sussq\Desktop\perl2exe\torrage.wsdl

不是一个。你可以用

代码语言:javascript
复制
file:///C:/Users/sussq/Desktop/perl2exe/torrage.wsdl

但如果我们不想硬编码一条绝对路径呢?我们可以利用以下几点:

代码语言:javascript
复制
use Cwd       qw( abs_path );
use FindBin   qw( $RealBin );
use URI::file qw( );

my $uri = URI::file->new( abs_path( "$RealBin/torrage.wsdl" ) )->as_string;

这将在与脚本相同的目录中查找torrage.wsdl

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70811664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档