2012-01-24 34 views
0

好的......我試圖將XML頁面發佈到戰略合作伙伴的網站,以便他們進行一些計算並返回響應代碼通過XML。使用Perl LWP :: UserAgent和需要用戶名和密碼連接的XML

我使用花園多種PERL,並試圖使用LWP :: UserAgent來做到這一點...如果有更優雅的方式,請指出我在那個方向。

我可以打他們的服務器,並得到一個代碼...但它拒絕訪問他們的服務器,因爲它所期望的用戶名和密碼是不正確的。用戶名和密碼沒有在實際的XML代碼中指定,它應該作爲實際的POST方法的一部分傳遞給服務器......但我不知道如何做到這一點。

合作伙伴提供了以下意見:

與他的XML 獲取生成,和他的用戶名/密碼組合更換YOUR_XML_FILE,YOUR_USER和YOUR_PASSWORD。這個 應該從他有他的perl腳本的服務器上完成。

wget的--no檢查證書--post文件YOUR_XML_FILE https://previewtest.clverify.com/webservice/exec -O previewsamplerequest.response.xml --http用戶= YOUR_USER --http-密碼= YOUR_PASSWORD

我不知道應該在哪裏生成,或者LWP :: UserAgent中的選項用於指定它們。有沒有人在那裏做過?

這裏是我的代碼:

sub ConsumerInfo { 
my $cid = shift; 

my $response = undef; 
my $sendXML = &Create_ConsumerInfo_Request($cid); 
if ($sendXML) { 
    &DoXMLUpload($sendXML); 

    my $browser = LWP::UserAgent->new(agent => 'perl post'); 
    $browser->credentials('','','username','[email protected]'); 
    $response = $browser->request(POST 'https://previewtest.clverify.com/webservice/exec', 
     Content_Type => 'text/xml', 
     Content => $sendXML); 
    print "Content-type:text/html\n\n"; 
    print $response->error_as_HTML unless $response->is_success; 
    print $response->as_string; 

} else { 
    &ErrorMsg("No XML Code Was Found."); 
    exit; 
} 
# =============================================================== 
# Need to insert parser in here to convert this into an array. 
# =============================================================== 
return $response; 
} 
+0

夥計,從您的代碼段刪除連接細節,像埃裏克說... – zgpmax

回答

2

警告:您提供真正的網址和密碼。改變這個儘快,因爲每個人都可以連接到你的合作伙伴的服務器!

恕我直言,這可以在文檔中找到:

$ UA->憑證($ netloc,$境界,$ UNAME,$通行證)
獲取/設置的用戶名和密碼是用於領域。 $ netloc是一個形式爲「:」的字符串。用戶名和密碼將只傳遞給此服務器。

的示例顯示了正確的方法來驗證:

$ua->credentials("www.example.com:80", "Some Realm", "foo", "secret");

你的情況,這將意味着:

$browser->credentials('previewtest.clverify.com:443','yourRealm','321321','[email protected]'); 
+0

虛幻......我不能相信我忘了刪除它。好主人,我變老了。非常感謝你的幫助! –

+0

什麼是$ realm的有效值?這是指什麼,具體是什麼? –

+0

答案在apache文件中:(http://httpd.apache.org/docs/1.3/howto/auth.html):「特別是,它發送一個與網站保護區相關的名稱這叫做領域,或者只是認證名稱。客戶端瀏覽器緩存您提供的用戶名和密碼,並將其與身份驗證領域一起存儲,以便如果從同一領域請求其他資源,則可以返回相同的用戶名和密碼來驗證該請求,而無需用戶再次鍵入它們。「 – Erik

相關問題