= gun:request(3)

== Name

gun:request - Perform the given request

== Description

[source,erlang]
----
request(ConnPid, Method, Path, Headers, Body)
    -> request(ConnPid, Method, Path, Headers, Body, #{})

request(ConnPid, Method, Path, Headers, Body, ReqOpts)
    -> StreamRef

ConnPid   :: pid()
Method    :: binary()
Path      :: iodata()
Headers   :: gun:req_headers()
Body      :: iodata()
ReqOpts   :: gun:req_opts()
StreamRef :: gun:stream_ref()
----

Perform the given request.

This is a general purpose function that should only be
used when other method-specific functions do not apply.

The function `request/5,6` sends the entire request, including
the request body, immediately. It is therefore not possible
to use link:man:gun:data(3)[gun:data(3)] after that. You
should provide a content-type header. Gun will set the
content-length header automatically.

== Arguments

ConnPid::

The pid of the Gun connection process.

Method::

Method to be used for the request.

Path::

Path to the resource.

Headers::

Additional request headers.

Body::

Request body.

ReqOpts::

Request options.

== Return value

A reference that identifies the newly created stream is
returned. It is this reference that must be passed in
subsequent calls and will be received in messages related
to this new stream.

== Changelog

* *2.0*: Implicit body detection has been removed. The body
         must now be provided either directly (even if empty)
         or using link:man:gun:headers(3)[gun:headers(3)].
* *1.0*: Function introduced.

== Examples

.Perform a request
[source,erlang]
----
StreamRef = gun:request(ConnPid, <<"PUT">>,
    "/lang/fr_FR/hello",
    [{<<"content-type">>, <<"text/plain">>}],
    <<"Bonjour !">>).
----

== See also

link:man:gun(3)[gun(3)],
link:man:gun:headers(3)[gun:headers(3)],
link:man:gun:await(3)[gun:await(3)],
link:man:gun:await_body(3)[gun:await_body(3)],
link:man:gun_push(3)[gun_push(3)],
link:man:gun_inform(3)[gun_inform(3)],
link:man:gun_response(3)[gun_response(3)],
link:man:gun_data(3)[gun_data(3)]
