---
name: "HTTP::Tinyish"
section: "3pm"
platform: "linux"
package: "libhttp-tinyish-perl"
version: "0.19-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/HTTP::Tinyish"
---

# HTTP::Tinyish(3pm)

HTTP::Tiny compatible HTTP client wrappers

## NAME

HTTP::Tinyish - HTTP::Tiny compatible HTTP client wrappers

## SYNOPSIS

```
  my $http = HTTP::Tinyish->new(agent => "Mozilla/4.0");
  my $res = $http->get("http://www.cpan.org/");
  warn $res->{status};
  $http->post("http://example.com/post", {
      headers => { "Content-Type" => "application/x-www-form-urlencoded" },
      content => "foo=bar&baz=quux",
  });
  $http->mirror("http://www.cpan.org/modules/02packages.details.txt.gz", "./02packages.details.txt.gz");
```

## DESCRIPTION

HTTP::Tinyish is a wrapper module for HTTP client modules LWP, HTTP::Tiny and HTTP client software `"curl"` and `"wget"`.

It provides an API compatible to HTTP::Tiny, and the implementation has been extracted out of App::cpanminus. This module can be useful in a restrictive environment where you need to be able to download CPAN modules without an HTTPS support in built-in HTTP library.

## BACKEND SELECTION

Backends are searched in the order of: LWP, HTTP::Tiny, `"curl"` and `"wget"`. HTTP::Tinyish will auto-detect if the backend also supports HTTPS, and use the appropriate backend based on the given URL to the request methods.

For example, if you only have HTTP::Tiny but without SSL related modules, it is possible that:

```
  my $http = HTTP::Tinyish->new;
  $http->get("http://example.com");  # uses HTTP::Tiny
  $http->get("https://example.com"); # uses curl
```

## COMPATIBILITIES

All request related methods such as `"get"`, `"post"`, `"put"`, `"delete"`, `"request"`, `"patch"` and `"mirror"` are supported.

### LWP

- •

  LWP backend requires LWP 5.802 or over to be functional, and LWP::Protocol::https to send HTTPS requests.

- •

  `"mirror"` method doesn't consider third options hash into account (i.e. you can't override the HTTP headers).

- •

  proxy is automatically detected from environment variables.

- •

  `"timeout"`, `"max_redirect"`, `"agent"`, `"default_headers"` and `"verify_SSL"` are translated.

### HTTP::Tiny

Because the actual HTTP::Tiny backend is used, all APIs are supported.

### Curl

- •

  This module has been tested with curl 7.22 and later.

- •

  HTTPS support is automatically detected by running `"curl --version"` and see its protocol output.

- •

  `"timeout"`, `"max_redirect"`, `"agent"`, `"default_headers"` and `"verify_SSL"` are supported.

### Wget

- •

  This module requires Wget 1.12 and later.

- •

  Wget prior to 1.15 doesn't support sending custom HTTP methods, so if you use `"$http->put"` for example, you'll get an internal error response (599).

- •

  HTTPS support is automatically detected.

- •

  `mirror()` method doesn't send `"If-Modified-Since"` header to the server, which will result in full-download every time because `"wget"` doesn't support `"--timestamping"` combined with `"-O"` option.

- •

  `"timeout"`, `"max_redirect"`, `"agent"`, `"default_headers"` and `"verify_SSL"` are supported.

## SIMILAR MODULES

- •

  File::Fetch - is core since 5.10. Has support for non-HTTP protocols such as ftp and git. Does not support HTTPS or basic authentication as of this writing.

- •

  Plient - provides more complete runtime API, but seems only compatible on Unix environments. Does not support **mirror()** method.

## AUTHOR

Tatsuhiko Miyagawa

## COPYRIGHT

Tatsuhiko Miyagawa, 2015-

## LICENSE

This module is licensed under the same terms as Perl itself.
