簡體   English   中英

將Vanilla Perl CGI中的請求標頭克隆到LWP UserAgent

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM