2010-11-29 45 views
0

我們的客戶有一個簡單的設置。使用PERL自動提交表單 - 調試!

頁面A具有提交給顯示查詢結果的頁面B的表單。不幸的是,沒有其他API或數據庫訪問來獲取數據。

由於我們需要經常執行此查詢,因此我們決定使用Perl自動執行此提交。

我用嗅探器確定了頁面A的表單鍵值對並複製了代碼。但是,在運行程序頁面B時拋出HTTP 500錯誤,沒有其他有意義的解釋。

任何指針調試此代碼?本身代碼很簡單:

 
use strict; 
    use warnings; 
    use LWP; 
    my $browser = LWP::UserAgent->new; 

    my $url = "targeturl.asp" 
    my $response = $browser->post($url, 
    [ 
    "HisSort" => "1", 
    "RTsort" => "", 
    "chkHisRun" => "on", 
    "chkRTRun" => "on", 
    "optAdHoc" => "on", 
    "optHist" => "", 
    "optServer" => "servername", 
    "optStatus" => "", 
    "optWhat" => "H", 
    "txtEnd" => "", 
    "txtFields" => "1,0,10,17,11,18,24,19,21,25,1", 
    "txtHEnd" => "11/3/2010", 
    "txtHStart" => "11/1/2010", 
    "txtServer" => "", 
    "txtStart" => "", 
    ] 
); 

注: 我沒有訪問頁面A或B頁

+0

您應該提供完整的網址。 – Benoit 2010-11-29 12:45:57

+0

如果您發送的是相同的請求,則會得到相同的響應。因此,您需要找出您的請求與瀏覽器的不同之處。例如,有沒有cookies?你的Perl腳本似乎沒有嘗試設置任何頭文件來匹配瀏覽器,或者B頁面可能無法解析用戶代理。 – 2010-11-29 13:04:03

回答

0

團隊, 這已得到解決。 它最終證明問題不在頭上,而在於我發送的鍵值對。頁面B沒有對字段進行驗證,而是直接將它們插入到查詢中。

我不得不嘗試一些蠻力組合(通過測試頁面A)來得到究竟是什麼頁面B期待。

感謝所有自願幫助的人。

1

的來源首先,我建議看WWW::Mechanize是圍繞LWP一個友好的包裝。其次,如果你的HTTP客戶端收到500個錯誤,那麼在Web服務器錯誤日誌中應該有更有意義的東西。最後,正如Matthew所提到的,您需要仔細檢查瀏覽器發送的請求,並找出它與Perl程序發送請求的不同之處。