Set Body
On this page
SetBody
Use SetBody to set request body, which accepts basic type such as string, []byte, int, uint, float and bool, and also support types such as io.Reader, req.GetContentFunc, it uses type assertion to determine the data type of body automatically.
// Create a client that dump request.
client := req.C().EnableDumpAllWithoutResponse()
// Send POST request with body.
client.R().SetBody(13.14).Post("https://httpbin.org/post")
:authority: httpbin.org
:method: POST
:path: /post
:scheme: https
content-type: text/plain; charset=utf-8
content-length: 4
accept-encoding: gzip
user-agent: req/v3 (https://github.com/imroc/req)
13.14
If it cannot determine, like map, struct and pointer, then it will wait and marshal to JSON or XML automatically according to the Content-Type header that have been set before or after, default to json if not set:
type User struct {
Name string `json:"name"`
Email string `json:"email"`
}
user := &User{Name: "imroc", Email: "[email protected]"}
client.R().SetBody(user).Post("https://httpbin.org/post")
:authority: httpbin.org
:method: POST
:path: /post
:scheme: https
content-type: application/json; charset=utf-8
accept-encoding: gzip
user-agent: req/v2 (https://github.com/imroc/req)
{"name":"imroc","email":"[email protected]"}
SetBodyXXX
You can also use more specific methods such as SetBodyJsonString, SetBodyJsonBytes, SetBodyXmlString and SetBodyXmlBytes to avoid type assertions and improve performance, and also set the Content-Type automatically without any guesswork:
client.R().SetBodyJsonString(`{"username": "imroc"}`).Post("https://httpbin.org/post")
:authority: httpbin.org
:method: POST
:path: /post
:scheme: https
content-type: application/json; charset=utf-8
accept-encoding: gzip
user-agent: req/v2 (https://github.com/imroc/req)
{"username": "imroc"}
Similarly, Use SetBodyJsonMarshal or SetBodyXmlMarshal methods can marshal body and set Content-Type automatically:
cient.R().SetBodyXmlMarshal(user).Post("https://httpbin.org/post")
:authority: httpbin.org
:method: POST
:path: /post
:scheme: https
content-type: text/xml; charset=utf-8
accept-encoding: gzip
user-agent: req/v2 (https://github.com/imroc/req)
<User><Name>imroc</Name><Email>[email protected]</Email></User>
Customize Marshal Function
Req uses json.Marshal of go standard library to marshal request body if needed, you can customize with client.SetJsonMarshal or client.SetXmlMarshal:
// Example of registering json-iterator
import jsoniter "github.com/json-iterator/go"
json := jsoniter.ConfigCompatibleWithStandardLibrary
client := req.C()
client.SetJsonMarshal(json.Marshal).
// Similarly, XML functions can also be customized
client.SetXmlMarshal(xmlMarshalFunc)