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 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.