2010-08-19 44 views
0

我想找出正確的方式來爲我們的網站列表提供圖標文件。基本上,列表圖標可以來自少數不同服務(Flickr,Picasa,Google靜態地圖,我們自己的內部圖像託管服務等)的圖像文件。圖標的URL存儲在我們的數據庫中,所以我想使每個上市圖標,通過簡單地調用顯示:在Perl中的圖標圖像代理

http://www.example.com/listing/1234/icon 

目前我一直在使用CGI.pm做一個重定向到正確的圖標但是,我希望直接顯示文件,而無需執行301重定向。下面是我們一直用的是什麼代碼:

my $url = "http://www.example-service.com/image-123.gif"; 
print $query->redirect(-url=>$url); 

我將不勝感激我怎麼能更新此服務通過代理的文件,而無需將用戶重定向任何建議和代碼示例。在此先感謝您的幫助!

回答

2

使用LWP獲取遠程文件並將其打印出來。

#!/usr/local/bin/perl 
use LWP::UserAgent; 
use CGI; 
my $q = CGI->new; 
my $ua = LWP::UserAgent->new; 
$ua->agent("MyApp/0.1"); 
my $url = 'http://www.example-service.com/image-123.gif'; 

# Create a request 
my $req = HTTP::Request->new(GET => $url); 

my $res = $ua->request($req); 

if ($res->is_success) { 
     print $q->header($res->content_type); 
     print $res->content; 
} else { 
     print $q->header('text/plain', $res->status_line); 
     print $res->status_line, "\n"; 
} 

或者當您添加一個新的上市,你可以寫你的數據庫的觸發器,這將下載它無論是在Webroot公司上市並保存圖像的某個地方或數據庫本身。

+0

難道沒有簡單的方法嗎?我們已經在我們的.htaccess文件中做了一些類似於此的操作,其中包含一行代碼,但僅作爲單個服務的代理,因此不需要數據庫查詢來獲取正確的URL。在Perl中是否沒有任何等價物可以讓您僅僅充當請求的代理而不需要下載並提供內容? – 2010-08-20 05:10:25

+1

羅素,這正是(網絡)代理所做的。 – daxim 2010-08-20 07:10:33

+0

@daxim - 如何將Apache RewriteMap與perl腳本一起使用來返回適當的URL?這是否會奏效?爲什麼會是另一種更好的選擇? – 2010-08-20 17:32:29