昨天我試圖做一個將資料發送到網站的腳本,但我遇到了一個奇怪的錯誤,我解決了:
我用 windows cmd 安裝了這個 perl 模塊(不是按順序):
cpanm MIME::Base64
cpanm MIME::Parser
cpanm MIME::Tools
cpanm Test::XML
cpanm SOAP::Lite
cpanm SOAP::WSDL
cpan App::cpanminus
這是我的舊腳本(caching.pl):
#!/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;
我遇到了這個錯誤(我解決了):
Service description 'http://itorrents.org/api/torrage.wsdl' can't be loaded: 500 Can't connect to itorrents.org:443
我通過從http://itorrents.org/api/torrage.wsdl下載 torrage.wsdl 解決了,我替換了這一行(舊的 caching.pl 腳本):
$infoHash = SOAP::Lite->service( 'http://itorrents.org/api/torrage.wsdl' )->cacheTorrent( $tor );
使用此行(而不是位于網站中的 torrage.wsdl,我嘗試將其替換為我下載的 torrage.wsdl 檔案所在的電腦路徑):
$infoHash = SOAP::Lite->service( 'C:\Users\sussq\Desktop\perl2exe\torrage.wsdl' )->cacheTorrent( $tor );
但是現在我遇到了這個錯誤:
Service description 'C:\Users\sussq\Desktop\perl2exe\torrage.wsdl' can't be loaded: 501 Protocol scheme 'c' is not supported
誰能知道如何解決這個問題?提前致謝。
uj5u.com熱心網友回復:
service()您呼叫的方法的定義在SOAP::Lite 的檔案中給出:
服務(服務網址)
$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 應該是:
file:///C:/Users/sussq/Desktop/perl2exe/torrage.wsdl
uj5u.com熱心網友回復:
需要一個 URI,并且
C:\Users\sussq\Desktop\perl2exe\torrage.wsdl
不是一個。一個可以使用
file:///C:/Users/sussq/Desktop/perl2exe/torrage.wsdl
但是,如果我們不想硬編碼絕對路徑怎么辦?我們可以使用以下內容:
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在與腳本相同的目錄中查找。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/420220.html
標籤:
