2012-11-26 223 views
1

我正在開發一個Web應用程序,我想知道是否有方法或某種模塊可以攔截或處理任何HTTP請求,然後才能顯示給客戶端。我無法修改httpd.conf文件,因此它不是一個選項。 我想通過拒絕訪問或重定向到其他頁面或通過修改發送給客戶端和其他某些東西的響應來爲我的Web應用程序添加一些安全性。 我也聽說過請求調度,也許它可以幫助我。有人知道如何做到這一點?如何攔截Perl中的HTTP請求?

+3

您必須提供更多信息:哪些框架/模塊;它是如何工作的(cgi/fastcgi/mod_perl);如何將響應發送到客戶端等 – PSIAlt

+0

我只想知道攔截HTTP請求的方法,就這些。我使用的是mod_perl,但我無法對其進行任何更改,而且我也沒有使用任何框架。 – ChuyAMS

+1

如果您使用的是mod_perl,那麼您可以完全訪問Apache請求生命週期。 http://perl.apache.org/docs/2.0/user/handlers/http.html –

回答

3

也許你可以使用Plack::Handler::Apache2啓用PSGI支持。從那裏,你可以使用PSGI中間件模塊來修改請求和響應。

如果不知道如何在您的mod_perl環境中執行Perl的設置,就很難獲得更具體的內容。

2

你可能想看看HTTP::Proxy,一個perl模塊編寫一個Web代理...這樣的例子:

# alternate initialisation 
    my $proxy = HTTP::Proxy->new; 
    $proxy->port(3128); # the classical accessors are here! 

    # this is a MainLoop-like method 
    $proxy->start; 
    my $d = HTTP::Daemon->new || die; 
    while (my $c = $d->accept) { 
     while (my $r = $c->get_request) { 
      if ($r->method eq 'GET' and $r->uri->path eq "/xyzzy") { 
       # remember, this is *not* recommended practice :-) 
       $c->send_file_response("/home/hd1/.zshrc"); 
      } 
      else { 
       $c->send_error(RC_FORBIDDEN) 
      } 
     } 
     $c->close; 
     undef($c); 
    }