簡體   English   中英

LWP getstore使用

[英]LWP getstore usage

我對Perl很陌生。 雖然我剛剛創建了一個簡單的腳本來使用getstore($url, $file);檢索getstore($url, $file); 但是我怎么知道任務是正確完成的還是中間的連接中斷,身份驗證失敗或任何響應。 我搜索了所有的網絡,發現一些內容,例如響應列表 ,以及一些有關useragent的東西,我完全聽不懂,尤其是運算符$ua->
我希望對這些運算符(我什至不知道->用於什么),RC代碼含義以及最后如何使用它進行解釋。
它有很多東西,所以我很感謝給出的任何答案,甚至只是部分答案。 而且,首先感謝您能提供幫助的人。 =)

LWP::Simple模塊就是這樣:非常簡單。 文檔指出, getstore函數返回HTTP狀態代碼,我們可以將其保存到變量中。 還有is_successis_error函數告訴我們某個返回值是否正確。

my $url      = "http://www.example.com/";
my $filename = "some-file.html";
my $rc = getstore($url, $filename)
if (is_error($rc)) {
  die "getstore of <$url> failed with $rc";
}

當然,這不會捕獲文件系統的錯誤。

die會引發致命異常,該異常終止腳本的執行並在終端上顯示其自身。 如果您不想中止執行,請使用warn

LWP::Simple函數為常見任務提供高級控制。 如果您需要對請求的更多控制,則必須手動創建LWP::UserAgent 用戶代理(縮寫為ua )是類似於瀏覽器的對象,可以向服務器發出請求。 我們對這些請求有非常詳細的控制,甚至可以修改確切的標頭字段。

->運算符是常規的解除引用運算符,當您需要復雜的數據結構時,將使用很多。 它也用於面向對象編程中的方法調用

$object->method(@args);

會使用@args$object上調用該method 我們還可以在類名上調用方法。 要創建一個新對象,通常在類名上使用new方法:

my $object = The::Class->new();

方法就像函數一樣,除了將其留給對象的類以弄清楚究竟將調用哪個函數。

使用LWP::UserAgent的常規工作流如下所示:

use LWP::UserAgent; # load the class

my $ua = LWP::UserAgent->new();

我們還可以為new方法提供命名參數。 因為這些UA對象是機器人,所以最好告訴每個發送此Bot的人。 我們可以使用from字段:

my $ua = LWP::UserAgent->new(
  from => 'ss-tangerine@example.com',
);

我們還可以將timeout更改為默認的三分鍾。 我們可以構造新的$ua 之后設置這些選項,這樣我們就可以

$ua->timeout(30);  # half a minute

$ua具有用於所有HTTP請求的方法,例如getpost 要復制getstore的行為,我們首先必須get我們感興趣的URL:

my $url = "http://www.example.com/";

my $response = $ua->get($url);

$response也是一個對象,我們可以詢問它是否為is_success

$response->is_success or die $response->status_line;

因此,如果執行流過該語句,一切都會順利進行。 現在,我們可以訪問請求的內容。 注意:請使用decoded_content方法,因為這可以為我們管理傳輸編碼:

my $content = $response->decoded_content;

現在我們可以將其打印到文件中:

use autodie; # automatic error handling
open my $fh, ">", "some-file.html";
print {$fh} $content;

(在Windows上處理二進制文件時:打開文件后使用binmode $fh ,或使用">:raw"打開模式)

做完了!

要了解LWP::UserAgent ,請閱讀文檔 要了解對象,請閱讀perlootut 您也可以訪問SO上的perl標記以獲取一些建議書。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM