Skip to content

Corion/HTTP-Request-Diff

Repository files navigation

Windows MacOS Linux

NAME

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

SYNOPSIS

use HTTP::Request::Common 'GET';

my $diff = HTTP::Request::Diff->new(
    reference => GET('https://example.com/?foo=bar' ),
    #actual    => $req2,
    skip_headers => \@skip,
    ignore_headers => \@skip2,
    mode => 'exact', # default is 'semantic'
);

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

say $diff->as_table(@differences);
# +-----------+-----------+-----------+
# | Type      | Reference | Actual    |
# +-----------+-----------+-----------+
# | query.foo | bar       | <missing> |
# +-----------+-----------+-----------+

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
    • A Content-Length: 0 header is equivalent to a missing Content-Length header

    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.

  • warn_on_newlines

    (optional) If we should output warnings when we receive \n delimited input instead of \r\n. This mostly happens when input is read from text files for regression test.

    Default is true.

->diff

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

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 Term::Table.

REPOSITORY

The public repository of this module is https://github.com/Corion/HTTP-Request-Diff.

SUPPORT

The public support forum of this module is https://perlmonks.org/.

BUG TRACKER

Please report bugs in this module via the Github bug queue at https://github.com/Corion/HTTP-Request-Diff/issues

AUTHOR

Max Maischein corion@cpan.org

COPYRIGHT (c)

Copyright 2023- by Max Maischein corion@cpan.org.

LICENSE

This module is released under the Artistic License 2.0.

About

HTTP::Request::Diff - diff two HTTP requests

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages