簡體   English   中英

無法使用 perl 模塊 HTTP::Request::Generator 傳遞自定義 header

[英]Unable to pass custom header using perl module HTTP::Request::Generator

我正在使用atom並測試HTTP::Request::Generator PERL 模塊。 下面的代碼在大部分情況下都有效,但我無法發送 cookies 或標頭,即使我在代碼中進行了設置,它也只顯示默認標頭。

use strict;
use warnings;
use HTTP::Request::Generator 'generate_requests';
use LWP::UserAgent;

my $ua = 'LWP::UserAgent'->new;

my $gen = generate_requests(
    method  => 'GET',
    host    => [  'https://abc.ai/' ],
    pattern => 'https://abc.ai',

    headers => {
        "User-Agent" => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64',
        "Cookie" => '_abc',
    },
    wrap    => sub {
        my ( $req ) = @_;
        # Fix up some values
        $req->{'headers'}{'Content-Length'} = 666;
    },
    wrap => \&HTTP::Request::Generator::as_http_request,
);

while ( my $req = $gen->() ) {
    my $response = $ua->request( $req );
    # print $response->protocol, ' ', $response->status_line, "\n";
    print $req->headers->as_string, "\n";
    print $req->as_string();
    # Do something with $response here?

    if ($response->is_success) {
        #  print $response->decoded_content;
        print $response ->header('title');
    }
    else {
        die $response->status_line;
    }
}

Output User-Agent: libwww-perl/6.31 Login

title頁表明我沒有登錄此 cookie 很好,我已經使用curl對其進行了測試,我可以手動登錄並檢索所需的資源。 為什么 perl 失敗,如何在上面的代碼中訪問我的 header 選項。 謝謝。

解決方案

body_params => {
       comment => ['Some comment', 'Another comment, A++'],
   },

添加上面的代碼就解決了。

您不能兩次提供相同的選項 ( wrap ):

    wrap    => sub {
        my ( $req ) = @_;
        # Fix up some values
        $req->{'headers'}{'Content-Length'} = 666;
    },
    wrap => \&HTTP::Request::Generator::as_http_request,

這可能會起作用:

    wrap    => sub {
        my ( $req ) = @_;
        # Fix up some values
        $req->{'headers'}{'Content-Length'} = 666;
        
        return HTTP::Request::Generator::as_http_request( $req );
    },

headers選項似乎采用 hashrefs 的 arrayref,如下所示:

    headers => [
        {
            "User-Agent" => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
            "Cookie" => '_abc',
        },
    ],

我想這樣做的原因是您可以提供替代的標頭集:

    headers => [
        {
            "User-Agent" => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
            "Cookie" => '_abc',
        },
        {
            "User-Agent" => 'Mozilla/1.0 (Hoover Vacuum Cleaner)',
            "Cookie" => '_def',
        },
    ],

這樣,您的請求生成器可以為每個頁面生成兩個請求,使用不同User-Agent字符串,或不同的 cookies(因此以不同的用戶身份登錄),或不同的Accept標頭,等等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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