Logo

Programming-Idioms

  • Lisp
  • Go

Idiom #323 Set HTTP request header

Make an HTTP request with method GET to the URL u, with the request header "accept-encoding: gzip", then store the body of the response in the buffer data.

import "io"
import "net/http"
req, err := http.NewRequest("GET", u, nil)
if err != nil {
	return err
}
req.Header.Set("accept-encoding", "gzip")
res, err := http.DefaultClient.Do(req)
if err != nil {
	return err
}
data, err := io.ReadAll(res.Body)
res.Body.Close()
if err != nil {
	return err
}

http.Request.Header is an exported field
use HTTP::Tiny;
my $response = HTTP::Tiny->new->get(
	$u, 
	{ 'accept-encoding' => 'gzip' } 
);

my $data;
if ( $response->{success} ) {
	$data = $response->{content};
} else {
	die sprintf "Failed with status '%s' reason '%s'\n",
		$response->{status}, $response->{reason};
}

There are many HTTP modules on CPAN, but HTTP::Tiny is a suitable choice for this problem.

New implementation...