2013-11-25 89 views
0

當我嘗試使用Perl提交POST請求時,它通常以301重定向到主頁結束。這裏是代碼:Perl HTTP請求:GET成功時POST失敗

use LWP::UserAgent; 

$ua = LWP::UserAgent->new; 

# This does not work 
my $url = 'http://www.opensubtitles.org/en/search2'; 
my $req = HTTP::Request->new(POST => $url); 
$req->content('MovieName=the+terminator+(1996)'); 


# Pass request to the user agent and get a response back 
print $req->as_string."\n";; 
my $res = $ua->request($req); 
if (!$res->is_success) { 
    print $res->status_line, "\n"; 
} 
else { 
    print "Success in posting search\n"; 
} 

爲了使它工作,我必須手動使用Firefox,轉到URL(!)。然後該腳本起作用。但是,使用GET請求完美地工作:

# This works 
my $url = 'http://www.opensubtitles.org/en/search2?MovieName=the+terminator+(1996)'; 
my $req = HTTP::Request->new(GET => $url); 

這是爲什麼?

+0

*在轉到Firefox中的url之後工作了什麼?去網址後你做了什麼? – ysth

+0

腳本應該返回與POST請求結果對應的html。只需啓動腳本就會停止發生錯誤,所以我直接使用Firefox訪問結果頁面。 **然後**啓動腳本顯示正確的html頁面。 –

回答

2

該網站並不指望該網址的POST,因此它會將您重定向回搜索頁面。

如果您只是將URL放入地址行,Firefox將使用GET而不是POST,這就是爲什麼它可以工作。

+0

謝謝。你能否解釋爲什麼'POST'在search.cpan.org中工作,如[本教程](http://www.emunix.emich.edu/~evett/BioinformaticsTools/Lecture18_WebAccess.html)所示?在這兩種情況下,都有一個等待'GET'的表單。 –

+0

@alex_reader:因爲'search.cpan.org'上的特定表單被寫入使用'POST'而不是'GET'。 Firefox使用站點返回的HTML來確定使用哪種方法發送表單信息。你應該這樣做。 – Borodin

+0

Bu這並不能解釋爲什麼腳本在訪問Firefox中的站點後工作... – gangabass