[英]Clone request headers in Vanilla Perl CGI to LWP UserAgent
我有一個perl CGI應用程序,我想獲取用戶請求標頭,並將其轉換為LWP :: UserAgent get請求。 基本上,目標是復制傳入的用戶標頭並使用它們發出單獨的請求。
我試圖自己創建標題但是當我嘗試顯示CGI標題然后我的克隆UserAgent標題時,它們並不完全相同。 這是我得到的:
my $cgi = new CGI; my %headers = map { $_ => $cgi->http($_) } $cgi->http; my $req_headers = HTTP::Headers->new( %headers ); my $ua = LWP::UserAgent->new( default_headers => $req_headers ); print Dumper $ua->default_headers;
基本上,%header和$ ua-> default_headers不相同。 $ ua-> default_headers有一個代理,可以將自己標識為perl腳本。 我可以手動設置$ ua-> agent(“”)但是還有其他缺陷,標題仍然不相同。
做我想做的最好的方法是什么? 必須有一個更簡單的解決方案......
與HTTP :: Headers使用的內容相比,看起來問題與傳入的http標頭的命名有關。
傳入的參數都有HTTP_
前綴,其中HTTP :: Headers不使用該命名約定(這是有意義的)。 此外,它看起來像(代碼中的快速閱讀)HTTP :: Headers在將' - '轉換為'_'以供自己使用時做的正確。
我建議將map
更改為刪除前綴的以下內容:
# remove leading HTTP_ from keys, note: this assumes all keys have pattern
# HTTP_*
%headers = map { ( /^HTTP_(.*?)$/ ) => $cgi->http($_) } $cgi->http;
這是我使用的調試腳本:
my $cgi = CGI->new;
my %headers = map { $_ => $cgi->http($_) } $cgi->http;
my $req_headers = HTTP::Headers->new( %headers );
my $ua = LWP::UserAgent->new( default_headers => $req_headers );
print "Content-type: text/plain\n\n";
print Dumper($ua->default_headers);
print Dumper( \%headers );
# remove HTTP_ from $_
%headers = map { ( /^HTTP_(.*?)$/ ) => $cgi->http($_) } $cgi->http;
$req_headers = HTTP::Headers->new( %headers );
$ua = LWP::UserAgent->new( default_headers => $req_headers );
print "headers part deux:\n";
print Dumper( $ua );
希望有助於
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.