my $jira = JIRA::REST->new({
url => 'https://something.com:8443',
username => 'username',
password => 'password',
session => 1,
});
上面的代碼不起作用并且失敗并出現以下錯誤,可能是由于最后的埠號
Can't connect to something.com:8443 (Bad file descriptor)
有沒有辦法/變數提及埠號?
uj5u.com熱心網友回復:
您需要將設定添加ssl_verify_none => 1到建構式中使用的哈希中。
底層 LWP 代碼允許您不驗證您連接到的系統的證書(不建議用于生產),或者它還允許您指定可用于驗證您連接的系統的證書的證書頒發機構 (CA) 證書到。看起來 JIRA::REST 只支持第一個選項。
最好只使用底層 LWP 代碼,如下所示:
use LWP::UserAgent;
my $ua = LWP::UserAgent->new(
ssl_opts => { verify_hostname => 1, SSL_ca_file => 'myCA.cer' },
protocols_allowed => ['https'],
);
my $req = HTTP::Request->new(
GET => 'https://something.com:8443/rest/api/latest/issue/ABC-123',
);
$req->authorization_basic('username','password');
my $res = $ua->request($req);
看起來 JIRA::REST 只是為您提供原始 JSON 回應,因此它并沒有真正為您節省那么多處理。
uj5u.com熱心網友回復:
的主要優點REST::Client是它可以為您保存一些內容以隱式添加到每個請求中。除了發送請求并將其回應回傳給您之外,沒有什么特別 REST-y 或有幫助的。不過,它JIRA::Client有一些優點,因為它知道如何獲取會話 cookie 并正確附加檔案,更重要的是,它可以處理分頁結果。但通常,當我與 Jira 一起做事時,我想要更多的權力。
回到 LWP 的全盛時期,跟蹤事務非常令人沮喪:請求-回應對。你可以,但你必須自己管理它。而且,這個程序中沒有鉤子,所以你必須每次都創建一切。
然后,LWP 嘗試解決一些 SSL 問題(驗證主機名等)并拆分出LWP::Protocol::https. 當您了解這一點時,這沒什么大不了的,但即使我這樣做了,每次我想使用 LWP 做某事時,我都必須記住這一點。發生的一切都是有原因的,但這并沒有讓它變得不那么煩人。這導致了jimtut 在他的回答中顯示的那種作業。每次。但是,這是通往不安全的道路上的一個小減速帶。
我更喜歡 Mojolicious,因為它代表了完整的交易,但也有鉤子(嗯,事件),允許你在行程進行時自動擺弄事物。
這是Mojo Web Clients的一個示例,它向我展示了為每個服務創建一個用戶代理并為每個事務設定一些東西。我可以在它開始作業之前以任何我喜歡的方式調整請求(這主要是 REST::Client 和 JIRA::Client 為你做的):
my $travis_ua = Mojo::UserAgent->new();
$travis_ua->on( start => sub {
my( $ua, $tx ) = @_;
$tx->req->headers->authorization(
"token $ENV{TRAVIS_API_KEY}" );
$tx->req->headers->accept(
'application/vnd.travis-ci.2.1 json' );
} );
my $appveyor_ua = Mojo::UserAgent->new();
$appveyor_ua->on( start => sub {
my( $ua, $tx ) = @_;
$tx->req->headers->authorization(
"Bearer $ENV{APPVEYOR_API_KEY}" );
} );
在基本身份驗證情況下,它只是該標頭中的不同值:
use Mojo::Util qw(b64_encode);
my $jira_ua = Mojo::UserAgent->new();
$jira_ua->on( start => sub {
my( $ua, $tx ) = @_;
$tx->req->headers->authorization(
'Basic ' . b64_encode( join ':', $username, $password ) );
} );
現在,當我使用這些用戶代理時,會自動添加身份驗證內容:
my $tx = $travis_ua->get( $url );
而且,這$tx讓我可以訪問請求和回應,所以我也不需要REST::Client為我處理這些。
由于 Mojolicious 在一個方便的包中處理所有這些,我不必為不同的物件爭吵。因此,可以為我做的事情已經不多了REST::Client。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/422447.html
標籤:
下一篇:使用perl從更新網站獲取資料
