aboutsummaryrefslogtreecommitdiffstats
path: root/doc/src/manual/gun.put.asciidoc
blob: 4f0cb39518c8dbf9c6184a978df229cc3137d7fc (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
= gun:put(3)

== Name

gun:put - Create or replace a resource

== Description

[source,erlang]
----
put(ConnPid, Path, Headers)
    -> StreamRef

put(ConnPid, Path, Headers, Body)
    -> put(ConnPid, Path, Headers, Body, #{})

put(ConnPid, Path, Headers, Body, ReqOpts)
    -> StreamRef

ConnPid   :: pid()
Path      :: iodata()
Headers   :: [{binary(), iodata()}]
Body      :: iodata()
ReqOpts   :: gun:req_opts()
StreamRef :: reference()
----

Create or replace a resource.

The behavior of this function varies depending on whether
a body is provided.

The function `put/3` expects either a content-length
or content-type header to indicate that a body will be
sent afterwards. The body can then be sent using
link:man:gun:data(3)[gun:data(3)].

The function `put/4,5` 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.

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

* *1.0*: Function introduced.

== Examples

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

.Put a resource in multiple calls
[source,erlang]
----
StreamRef = gun:put(ConnPid, "/lang/fr_FR/hello", [
    {<<"content-type">>, <<"text/plain">>}
]).
gun:data(ConnPid, StreamRef, fin, <<"Bonjour !">>).
----

.Put a resource with request options
[source,erlang]
----
StreamRef = gun:put(ConnPid, "/lang/fr_FR/hello",
    [{<<"content-type">>, <<"text/plain">>}],
    <<"Bonjour !">>,
    #{reply_to => ReplyToPid}).
----

== See also

link:man:gun(3)[gun(3)],
link:man:gun:patch(3)[gun:patch(3)],
link:man:gun:post(3)[gun:post(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)]