The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

HTTP::Request::Diff - create diffs between HTTP request

SYNOPSIS

my $diff = HTTP::Request::Diff->new(
    reference => $req,
    #actual    => $req2,
    skip_headers => \@skip,
    ignore_headers => \@skip2,
    mode => 'exact', # default is 'semantic'
);

my @differences = $diff->diff( $actual );
say Dumper $differences[0];
# {
#   'kind' => 'value',
#   'type' => 'query.foo',
#   'reference' => [
#                    undef
#                  ],
#   'actual' => [
#                 'bar'
#               ]
# }
#

METHODS

->new

my $diff = HTTP::Request::Diff->new(
    mode => 'semantic',
);

Options

  • mode

    mode => 'strict',

    The comparison mode. The default is semantic comparison, which considers some differences insignificant:

    • The order of HTTP headers

    • The boundary strings of multipart POST requests

    • The order of query parameters

    • The order of form parameters

    strict mode wants the requests to be as identical as possible. lax mode considers query parameters in the POST body as equivalent.

  • reference

    (optional) The reference request to compare against. Alternatively pass in the request in the call to ->diff.

  • skip_headers

    skip_headers => ['X-Proxied-For'],

    List of headers to skip when comparing. Missing headers are not significant.

  • ignore_headers

    ignore_headers => ['Accept-Encoding'],

    List of headers to ignore when comparing. Missing headers are significant.

  • canonicalize

    Callback to canonicalize a request. The request will be passed in unmodified either as a string or a HTTP::Request.

  • compare

    Arrayref of things to compare.

->diff

my @diff = $diff->diff( $reference, $actual );
my @diff = $diff->diff( $actual );

Performs the diff and returns an array of hashrefs with differences.

->as_table( @diff )

my @diff = $diff->diff( $request1, $request2 );
print $diff->as_table( @diff );
# +-----------------+-----------+--------+
# | Type            | Reference | Actual |
# | request.content | Ümloud    | Umloud |
# +-----------------+-----------+--------+

Renders a diff as a table, using Text::Table::Any.