<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Welcome on Resty</title><link>https://resty.dev/</link><description>Recent content in Welcome on Resty</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://resty.dev/index.xml" rel="self" type="application/rss+xml"/><item><title>GET Request</title><link>https://resty.dev/docs/example/get-request/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/example/get-request/</guid><description>&lt;h1 id="get-request"&gt;GET Request&lt;a class="anchor" href="#get-request"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;This page discusses simple GET requests. Resty features can be used across nearly all HTTP methods.&lt;/p&gt;
&lt;blockquote class='book-hint note'&gt;
&lt;ul&gt;
&lt;li&gt;Explore the documentation for additional use cases.&lt;/li&gt;
&lt;li&gt;Examples use request-level methods; however, Resty also includes client-level methods to configure settings for all requests.&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;h2 id="examples"&gt;Examples&lt;a class="anchor" href="#examples"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;See &lt;a href="https://resty.dev/docs/request-body-types/"&gt;Request Body Types&lt;/a&gt;, &lt;a href="https://resty.dev/docs/allow-payload-on/"&gt;Allow Payload On&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// create a Resty client&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;New&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;defer&lt;/span&gt; client.&lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="simple"&gt;Simple&lt;a class="anchor" href="#simple"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;res, err &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; client.&lt;span style="color:#57c7ff"&gt;R&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;Get&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;https://httpbin.org/get&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(err, res)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="with-query-params"&gt;With Query Params&lt;a class="anchor" href="#with-query-params"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;See &lt;a href="https://resty.dev/docs/request-query-params/"&gt;Request Query Params&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;res, err &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; client.&lt;span style="color:#57c7ff"&gt;R&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetQueryParams&lt;/span&gt;(&lt;span style="color:#ff5c57"&gt;map&lt;/span&gt;[&lt;span style="color:#9aedfe"&gt;string&lt;/span&gt;]&lt;span style="color:#9aedfe"&gt;string&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;page_no&amp;#34;&lt;/span&gt;: &lt;span style="color:#5af78e"&gt;&amp;#34;1&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;limit&amp;#34;&lt;/span&gt;: &lt;span style="color:#5af78e"&gt;&amp;#34;20&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;sort&amp;#34;&lt;/span&gt;: &lt;span style="color:#5af78e"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;order&amp;#34;&lt;/span&gt;: &lt;span style="color:#5af78e"&gt;&amp;#34;asc&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;random&amp;#34;&lt;/span&gt;: strconv.&lt;span style="color:#57c7ff"&gt;FormatInt&lt;/span&gt;(time.&lt;span style="color:#57c7ff"&gt;Now&lt;/span&gt;().&lt;span style="color:#57c7ff"&gt;Unix&lt;/span&gt;(), &lt;span style="color:#ff9f43"&gt;10&lt;/span&gt;),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetHeader&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;Accept&amp;#34;&lt;/span&gt;, &lt;span style="color:#5af78e"&gt;&amp;#34;application/json&amp;#34;&lt;/span&gt;).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetAuthToken&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;bc594900518b4f7eac75bd37f019e08fbc594900518b4f7eac75bd37f019e08f&amp;#34;&lt;/span&gt;).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;Get&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;/search_result&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(err, res)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="with-path-params"&gt;With Path Params&lt;a class="anchor" href="#with-path-params"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;See &lt;a href="https://resty.dev/docs/request-path-params/"&gt;Request Path Params&lt;/a&gt;&lt;/p&gt;</description></item><item><title>POST, PUT, PATCH Request</title><link>https://resty.dev/docs/example/post-put-patch-request/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/example/post-put-patch-request/</guid><description>&lt;h1 id="post-put-patch-request"&gt;POST, PUT, PATCH Request&lt;a class="anchor" href="#post-put-patch-request"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;This page discusses simple POST, PUT, and PATCH requests. Resty features can be used across nearly all HTTP methods.&lt;/p&gt;
&lt;blockquote class='book-hint note'&gt;
&lt;ul&gt;
&lt;li&gt;Explore the documentation for additional use cases.&lt;/li&gt;
&lt;li&gt;Examples use request-level methods; however, Resty also includes client-level methods to configure settings for all requests.&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;h2 id="examples"&gt;Examples&lt;a class="anchor" href="#examples"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;See &lt;a href="https://resty.dev/docs/request-body-types/"&gt;Request Body Types&lt;/a&gt;, &lt;a href="https://resty.dev/docs/multipart/"&gt;Multipart&lt;/a&gt;, &lt;a href="https://resty.dev/docs/form-data/"&gt;Form Data&lt;/a&gt;, etc.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// create a Resty client&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;New&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;defer&lt;/span&gt; client.&lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="post"&gt;POST&lt;a class="anchor" href="#post"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;res, err &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; client.&lt;span style="color:#57c7ff"&gt;R&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetBody&lt;/span&gt;(User{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Username: &lt;span style="color:#5af78e"&gt;&amp;#34;testuser&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Password: &lt;span style="color:#5af78e"&gt;&amp;#34;testpass&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }). &lt;span style="color:#78787e"&gt;// default request content type is JSON&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetResult&lt;/span&gt;(&lt;span style="color:#ff6ac1"&gt;&amp;amp;&lt;/span&gt;LoginResponse{}). &lt;span style="color:#78787e"&gt;// or SetResult(LoginResponse{}).&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetResultError&lt;/span&gt;(&lt;span style="color:#ff6ac1"&gt;&amp;amp;&lt;/span&gt;LoginErrorResponse{}). &lt;span style="color:#78787e"&gt;// or SetResultError(LoginErrorResponse{}).&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;Post&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;https://myapp.com/login&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(err, res)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(res.&lt;span style="color:#57c7ff"&gt;Result&lt;/span&gt;().(&lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;LoginResponse))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(res.&lt;span style="color:#57c7ff"&gt;ResultError&lt;/span&gt;().(&lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;LoginErrorResponse))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="put"&gt;PUT&lt;a class="anchor" href="#put"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;res, err &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; client.&lt;span style="color:#57c7ff"&gt;R&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetBody&lt;/span&gt;(Article{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Title: &lt;span style="color:#5af78e"&gt;&amp;#34;Resty&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Content: &lt;span style="color:#5af78e"&gt;&amp;#34;This is my article content, oh ya!&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Author: &lt;span style="color:#5af78e"&gt;&amp;#34;Jeevanandam M&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Tags: []&lt;span style="color:#9aedfe"&gt;string&lt;/span&gt;{&lt;span style="color:#5af78e"&gt;&amp;#34;article&amp;#34;&lt;/span&gt;, &lt;span style="color:#5af78e"&gt;&amp;#34;sample&amp;#34;&lt;/span&gt;, &lt;span style="color:#5af78e"&gt;&amp;#34;resty&amp;#34;&lt;/span&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }). &lt;span style="color:#78787e"&gt;// default request content type is JSON&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetAuthToken&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;bc594900518b4f7eac75bd37f019e08fbc594900518b4f7eac75bd37f019e08f&amp;#34;&lt;/span&gt;).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetResultError&lt;/span&gt;(&lt;span style="color:#ff6ac1"&gt;&amp;amp;&lt;/span&gt;Error{}). &lt;span style="color:#78787e"&gt;// or SetResultError(Error{}).&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;Put&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;https://myapp.com/articles/123456&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(err, res)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(res.&lt;span style="color:#57c7ff"&gt;ResultError&lt;/span&gt;().(&lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;Error))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="patch"&gt;PATCH&lt;a class="anchor" href="#patch"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;resp, err &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; client.&lt;span style="color:#57c7ff"&gt;R&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetBody&lt;/span&gt;(Article{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Tags: []&lt;span style="color:#9aedfe"&gt;string&lt;/span&gt;{&lt;span style="color:#5af78e"&gt;&amp;#34;new tag1&amp;#34;&lt;/span&gt;, &lt;span style="color:#5af78e"&gt;&amp;#34;new tag2&amp;#34;&lt;/span&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }). &lt;span style="color:#78787e"&gt;// default request content type is JSON&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetAuthToken&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;bc594900518b4f7eac75bd37f019e08fbc594900518b4f7eac75bd37f019e08f&amp;#34;&lt;/span&gt;).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetResultError&lt;/span&gt;(&lt;span style="color:#ff6ac1"&gt;&amp;amp;&lt;/span&gt;Error{}). &lt;span style="color:#78787e"&gt;// or SetResultError(Error{}).&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;Patch&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;https://myapp.com/articles/123456&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(err, res)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(res.&lt;span style="color:#57c7ff"&gt;ResultError&lt;/span&gt;().(&lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;Error))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title/><link>https://resty.dev/docs/request-query-params/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/request-query-params/</guid><description>&lt;h1 id="request-query-params"&gt;Request Query Params&lt;a class="anchor" href="#request-query-params"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Resty provides easy-to-add request query parameters into requests.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Example: search=kitchen%20papers&amp;amp;size=large
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote class="book-hint info"&gt;
 &lt;p&gt;
 &lt;strong&gt;NOTE:&lt;/strong&gt; Client-level settings can be overridden at the request level.
 &lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="examples"&gt;Examples&lt;a class="anchor" href="#examples"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="single-query-param"&gt;Single Query Param&lt;a class="anchor" href="#single-query-param"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;New&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;defer&lt;/span&gt; c.&lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c.&lt;span style="color:#57c7ff"&gt;R&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetQueryParam&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;search&amp;#34;&lt;/span&gt;, &lt;span style="color:#5af78e"&gt;&amp;#34;kitchen papers&amp;#34;&lt;/span&gt;).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetQueryParam&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;size&amp;#34;&lt;/span&gt;, &lt;span style="color:#5af78e"&gt;&amp;#34;large&amp;#34;&lt;/span&gt;).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;Get&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;/search&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// Result:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// /search?search=kitchen%20papers&amp;amp;size=large&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="multiple-query-params"&gt;Multiple Query Params&lt;a class="anchor" href="#multiple-query-params"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;New&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;defer&lt;/span&gt; c.&lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c.&lt;span style="color:#57c7ff"&gt;R&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetQueryParams&lt;/span&gt;(&lt;span style="color:#ff5c57"&gt;map&lt;/span&gt;[&lt;span style="color:#9aedfe"&gt;string&lt;/span&gt;]&lt;span style="color:#9aedfe"&gt;string&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#5af78e"&gt;&amp;#34;search&amp;#34;&lt;/span&gt;: &lt;span style="color:#5af78e"&gt;&amp;#34;kitchen papers&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#5af78e"&gt;&amp;#34;size&amp;#34;&lt;/span&gt;: &lt;span style="color:#5af78e"&gt;&amp;#34;large&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	}).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;Get&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;/search&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// Result:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// /search?search=kitchen%20papers&amp;amp;size=large&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="query-params-from-urlvalues"&gt;Query Params from url.Values&lt;a class="anchor" href="#query-params-from-urlvalues"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;New&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;defer&lt;/span&gt; c.&lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c.&lt;span style="color:#57c7ff"&gt;R&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetQueryParamsFromValues&lt;/span&gt;(url.Values{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;status&amp;#34;&lt;/span&gt;: []&lt;span style="color:#9aedfe"&gt;string&lt;/span&gt;{&lt;span style="color:#5af78e"&gt;&amp;#34;pending&amp;#34;&lt;/span&gt;, &lt;span style="color:#5af78e"&gt;&amp;#34;approved&amp;#34;&lt;/span&gt;, &lt;span style="color:#5af78e"&gt;&amp;#34;open&amp;#34;&lt;/span&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;Get&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;/search&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// Result:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// /search?status=pending&amp;amp;status=approved&amp;amp;status=open&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="query-params-from-string"&gt;Query Params from String&lt;a class="anchor" href="#query-params-from-string"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;New&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;defer&lt;/span&gt; c.&lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c.&lt;span style="color:#57c7ff"&gt;R&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetQueryString&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;productId=232&amp;amp;template=fresh-sample&amp;amp;cat=resty&amp;amp;source=google&amp;amp;kw=buy a lot more&amp;#34;&lt;/span&gt;).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;Get&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;/search&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// Result:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// /search?cat=resty&amp;amp;kw=buy+a+lot+more&amp;amp;productId=232&amp;amp;source=google&amp;amp;template=fresh-sample&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="methods"&gt;Methods&lt;a class="anchor" href="#methods"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="client"&gt;Client&lt;a class="anchor" href="#client"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetQueryParam" rel="external" target="_blank"&gt;Client.SetQueryParam&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetQueryParamAny" rel="external" target="_blank"&gt;Client.SetQueryParamAny&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetQueryParams" rel="external" target="_blank"&gt;Client.SetQueryParams&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="request"&gt;Request&lt;a class="anchor" href="#request"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetQueryParam" rel="external" target="_blank"&gt;Request.SetQueryParam&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetQueryParamAny" rel="external" target="_blank"&gt;Request.SetQueryParamAny&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetQueryParams" rel="external" target="_blank"&gt;Request.SetQueryParams&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetQueryParamsFromValues" rel="external" target="_blank"&gt;Request.SetQueryParamsFromValues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetQueryString" rel="external" target="_blank"&gt;Request.SetQueryString&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="see-also"&gt;See Also&lt;a class="anchor" href="#see-also"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://resty.dev/docs/any-value-methods/"&gt;Any Value Methods&lt;/a&gt; - Methods that accept any type and auto-convert to string&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>DELETE Request</title><link>https://resty.dev/docs/example/delete-request/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/example/delete-request/</guid><description>&lt;h1 id="delete-request"&gt;DELETE Request&lt;a class="anchor" href="#delete-request"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;This page discusses simple DELETE requests. Resty features can be used across nearly all HTTP methods.&lt;/p&gt;
&lt;blockquote class='book-hint note'&gt;
&lt;ul&gt;
&lt;li&gt;Explore the documentation for additional use cases.&lt;/li&gt;
&lt;li&gt;Examples use request-level methods; however, Resty also includes client-level methods to configure settings for all requests.&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;h2 id="examples"&gt;Examples&lt;a class="anchor" href="#examples"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;See &lt;a href="https://resty.dev/docs/request-body-types/"&gt;Request Body Types&lt;/a&gt;, &lt;a href="https://resty.dev/docs/allow-payload-on/"&gt;Allow Payload On&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// create a Resty client&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;New&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;defer&lt;/span&gt; client.&lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="simple"&gt;Simple&lt;a class="anchor" href="#simple"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;res, err &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; client.&lt;span style="color:#57c7ff"&gt;R&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetAuthToken&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;bc594900518b4f7eac75bd37f019e08fbc594900518b4f7eac75bd37f019e08f&amp;#34;&lt;/span&gt;).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetResultError&lt;/span&gt;(&lt;span style="color:#ff6ac1"&gt;&amp;amp;&lt;/span&gt;Error{}). &lt;span style="color:#78787e"&gt;// or SetResultError(Error{}).&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;Delete&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;https://myapp.com/articles/123456&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(err, res)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(res.&lt;span style="color:#57c7ff"&gt;ResultError&lt;/span&gt;().(&lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;Error))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="with-payload"&gt;With Payload&lt;a class="anchor" href="#with-payload"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;See &lt;a href="https://resty.dev/docs/allow-payload-on/"&gt;Allow Payload On&lt;/a&gt;&lt;/p&gt;</description></item><item><title>OPTIONS, HEAD, TRACE Request</title><link>https://resty.dev/docs/example/options-head-trace-request/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/example/options-head-trace-request/</guid><description>&lt;h1 id="options-head-trace-request"&gt;OPTIONS, HEAD, TRACE Request&lt;a class="anchor" href="#options-head-trace-request"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;This page discusses simple OPTIONS, HEAD, and TRACE requests. Resty features can be used across nearly all HTTP methods.&lt;/p&gt;
&lt;blockquote class='book-hint note'&gt;
&lt;ul&gt;
&lt;li&gt;Explore the documentation for additional use cases.&lt;/li&gt;
&lt;li&gt;Examples use request-level methods; however, Resty also includes client-level methods to configure settings for all requests.&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;h2 id="examples"&gt;Examples&lt;a class="anchor" href="#examples"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// create a Resty client&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;New&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;defer&lt;/span&gt; client.&lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="options"&gt;OPTIONS&lt;a class="anchor" href="#options"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Commonly used to determine permitted HTTP methods or CORS preflight requests.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;res, err &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; client.&lt;span style="color:#57c7ff"&gt;R&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetAuthToken&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;bc594900518b4f7eac75bd37f019e08fbc594900518b4f7eac75bd37f019e08f&amp;#34;&lt;/span&gt;).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;Options&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;https://myapp.com/servers/nyc-dc-01&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(err, res)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(res.&lt;span style="color:#57c7ff"&gt;Header&lt;/span&gt;())&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="head"&gt;HEAD&lt;a class="anchor" href="#head"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;res, err = client.&lt;span style="color:#57c7ff"&gt;R&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetAuthToken&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;bc594900518b4f7eac75bd37f019e08fbc594900518b4f7eac75bd37f019e08f&amp;#34;&lt;/span&gt;).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;Head&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;https://myapp.com/videos/hi-res-video&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(err, res)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(res.&lt;span style="color:#57c7ff"&gt;Header&lt;/span&gt;())&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="trace"&gt;TRACE&lt;a class="anchor" href="#trace"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;res, err = client.&lt;span style="color:#57c7ff"&gt;R&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetAuthToken&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;bc594900518b4f7eac75bd37f019e08fbc594900518b4f7eac75bd37f019e08f&amp;#34;&lt;/span&gt;).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;Trace&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;https://myapp.com/test&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(err, res)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title/><link>https://resty.dev/docs/request-path-params/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/request-path-params/</guid><description>&lt;h1 id="request-path-params"&gt;Request Path Params&lt;a class="anchor" href="#request-path-params"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Resty provides easy-to-use dynamic request URL path params. It replaces the value of the key while composing the request URL. The value will be escaped using the &lt;a href="https://pkg.go.dev/net/url#PathEscape" rel="external" target="_blank"&gt;url.PathEscape&lt;/a&gt; function.&lt;/p&gt;
&lt;blockquote class="book-hint info"&gt;
 &lt;p&gt;
 &lt;strong&gt;NOTE:&lt;/strong&gt; Client-level settings can be overridden at the request level.
 &lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="examples"&gt;Examples&lt;a class="anchor" href="#examples"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="single-path-param"&gt;Single Path Param&lt;a class="anchor" href="#single-path-param"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;New&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;defer&lt;/span&gt; c.&lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c.&lt;span style="color:#57c7ff"&gt;R&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetPathParam&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;userId&amp;#34;&lt;/span&gt;, &lt;span style="color:#5af78e"&gt;&amp;#34;sample@sample.com&amp;#34;&lt;/span&gt;).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;Get&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;/v1/users/{userId}/details&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// Result:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// /v1/users/sample@sample.com/details&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="multiple-path-params"&gt;Multiple Path Params&lt;a class="anchor" href="#multiple-path-params"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;New&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;defer&lt;/span&gt; c.&lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c.&lt;span style="color:#57c7ff"&gt;R&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetPathParams&lt;/span&gt;(&lt;span style="color:#ff5c57"&gt;map&lt;/span&gt;[&lt;span style="color:#9aedfe"&gt;string&lt;/span&gt;]&lt;span style="color:#9aedfe"&gt;string&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;userId&amp;#34;&lt;/span&gt;: &lt;span style="color:#5af78e"&gt;&amp;#34;sample@sample.com&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;subAccountId&amp;#34;&lt;/span&gt;: &lt;span style="color:#5af78e"&gt;&amp;#34;100002&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;path&amp;#34;&lt;/span&gt;: &lt;span style="color:#5af78e"&gt;&amp;#34;groups/developers&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;Get&lt;/span&gt;(&lt;span style="color:#ff5c57"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#ff6ac1"&gt;/&lt;/span&gt;v1&lt;span style="color:#ff6ac1"&gt;/&lt;/span&gt;users&lt;span style="color:#ff6ac1"&gt;/&lt;/span&gt;{userId}&lt;span style="color:#ff6ac1"&gt;/&lt;/span&gt;{subAccountId}&lt;span style="color:#ff6ac1"&gt;/&lt;/span&gt;{path}&lt;span style="color:#ff6ac1"&gt;/&lt;/span&gt;details)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// Result:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// /v1/users/sample@sample.com/100002/groups%2Fdevelopers/details&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="methods"&gt;Methods&lt;a class="anchor" href="#methods"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="client"&gt;Client&lt;a class="anchor" href="#client"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetPathParam" rel="external" target="_blank"&gt;Client.SetPathParam&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetPathParamAny" rel="external" target="_blank"&gt;Client.SetPathParamAny&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetPathParams" rel="external" target="_blank"&gt;Client.SetPathParams&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="request"&gt;Request&lt;a class="anchor" href="#request"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetPathParam" rel="external" target="_blank"&gt;Request.SetPathParam&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetPathParamAny" rel="external" target="_blank"&gt;Request.SetPathParamAny&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetPathParams" rel="external" target="_blank"&gt;Request.SetPathParams&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="request-raw-path-params"&gt;Request Raw Path Params&lt;a class="anchor" href="#request-raw-path-params"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Resty provides easy-to-use dynamic request URL &lt;strong&gt;raw&lt;/strong&gt; path params. It replaces the value of the key while composing the request URL. The value used &lt;strong&gt;as-is&lt;/strong&gt;, no escapes applied.&lt;/p&gt;</description></item><item><title/><link>https://resty.dev/docs/any-value-methods/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/any-value-methods/</guid><description>&lt;h1 id="any-value-methods"&gt;Any Value Methods&lt;a class="anchor" href="#any-value-methods"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Resty provides &lt;code&gt;*Any&lt;/code&gt; convenience methods that accept &lt;code&gt;any&lt;/code&gt; type values and automatically convert them to strings using predefined formatting rules. These methods eliminate the need for manual &lt;code&gt;strconv&lt;/code&gt; or &lt;code&gt;fmt.Sprintf&lt;/code&gt; calls when working with non-string values.&lt;/p&gt;
&lt;blockquote class="book-hint info"&gt;
 &lt;p&gt;
 &lt;strong&gt;NOTE:&lt;/strong&gt; Client-level settings can be overridden at the request level.
 &lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="type-conversion-rules"&gt;Type Conversion Rules&lt;a class="anchor" href="#type-conversion-rules"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Values are converted to strings based on these rules (in order of priority):&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;th&gt;Conversion Method&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Used as-is&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;int&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;strconv.Itoa()&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;bool&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;strconv.FormatBool()&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;int64&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;strconv.FormatInt()&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;[]string&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;strings.Join(v, &amp;quot;,&amp;quot;)&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;time.Time&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;v.Format(time.RFC3339)&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;[]byte&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;string(v)&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;float64&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;strconv.FormatFloat()&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;int32&lt;/code&gt;, &lt;code&gt;int16&lt;/code&gt;, &lt;code&gt;int8&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;strconv.FormatInt()&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;uint64&lt;/code&gt;, &lt;code&gt;uint32&lt;/code&gt;, &lt;code&gt;uint16&lt;/code&gt;, &lt;code&gt;uint8&lt;/code&gt;, &lt;code&gt;uint&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;strconv.FormatUint()&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;float32&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;strconv.FormatFloat()&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;fmt.Stringer&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;v.String()&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Any other type&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;fmt.Sprint(v)&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="examples"&gt;Examples&lt;a class="anchor" href="#examples"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="query-params-with-non-string-values"&gt;Query Params with Non-String Values&lt;a class="anchor" href="#query-params-with-non-string-values"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Instead of manually converting values to strings:&lt;/p&gt;</description></item><item><title/><link>https://resty.dev/docs/request-body-types/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/request-body-types/</guid><description>&lt;h1 id="request-body-types"&gt;Request Body Types&lt;a class="anchor" href="#request-body-types"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Resty supports various request body types.&lt;/p&gt;
&lt;blockquote class='book-hint note'&gt;
&lt;ul&gt;
&lt;li&gt;Resty v3 streams the content in the request body for the &lt;code&gt;io.Reader&lt;/code&gt; interface.&lt;/li&gt;
&lt;li&gt;Resty v3 uses a streaming approach by default to handle JSON and XML content types, improving memory efficiency. Resty also provides the &lt;a href="https://resty.dev/docs/content-type-encoder-and-decoder/#in-memory-marshal-and-unmarshal"&gt;In-Memory Marshal and Unmarshal&lt;/a&gt; section.&lt;/li&gt;
&lt;li&gt;Setting the Content-Type header in the request skips the auto-detect computation.&lt;/li&gt;
&lt;li&gt;It does request body automatic marshaling for &lt;code&gt;struct&lt;/code&gt; and &lt;code&gt;map&lt;/code&gt; data types.&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;h2 id="struct"&gt;Struct&lt;a class="anchor" href="#struct"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote class='book-hint note'&gt;
&lt;p&gt;For the &lt;code&gt;XML&lt;/code&gt; request body, set Content-Type as &lt;code&gt;application/xml&lt;/code&gt;.&lt;/p&gt;</description></item><item><title/><link>https://resty.dev/docs/response-auto-parse/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/response-auto-parse/</guid><description>&lt;h1 id="response-auto-parse"&gt;Response Auto Parse&lt;a class="anchor" href="#response-auto-parse"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Out of the box, Resty automatically unmarshals JSON and XML responses based on the response header &lt;code&gt;Content-Type&lt;/code&gt; when &lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetResult" rel="external" target="_blank"&gt;Request.SetResult&lt;/a&gt; or &lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetResultError" rel="external" target="_blank"&gt;Request.SetResultError&lt;/a&gt; is used.&lt;/p&gt;
&lt;p&gt;For custom content types or custom parsing, see &lt;a href="https://resty.dev/docs/content-type-encoder-and-decoder/"&gt;Content-Type {Encoder, Decoder}&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="examples"&gt;Examples&lt;a class="anchor" href="#examples"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;res, err &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; client.&lt;span style="color:#57c7ff"&gt;R&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetBody&lt;/span&gt;(User{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Username: &lt;span style="color:#5af78e"&gt;&amp;#34;testuser&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Password: &lt;span style="color:#5af78e"&gt;&amp;#34;testpass&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }). &lt;span style="color:#78787e"&gt;// default request content-type is JSON&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetResult&lt;/span&gt;(&lt;span style="color:#ff6ac1"&gt;&amp;amp;&lt;/span&gt;LoginResponse{}).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetResultError&lt;/span&gt;(&lt;span style="color:#ff6ac1"&gt;&amp;amp;&lt;/span&gt;LoginErrorResponse{}).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;Post&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;https://myapp.com/login&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(err)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(res.&lt;span style="color:#57c7ff"&gt;Result&lt;/span&gt;().(&lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;LoginResponse)) &lt;span style="color:#78787e"&gt;// success: status code &amp;gt; 199 &amp;amp;&amp;amp; status code &amp;lt; 300&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(res.&lt;span style="color:#57c7ff"&gt;ResultError&lt;/span&gt;().(&lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;LoginErrorResponse)) &lt;span style="color:#78787e"&gt;// error: status code &amp;gt; 399&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="setresult-and-setresulterror-usage"&gt;SetResult and SetResultError Usage&lt;a class="anchor" href="#setresult-and-setresulterror-usage"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;blockquote class='book-hint note'&gt;
&lt;p&gt;Examples describe the method &lt;code&gt;SetResult&lt;/code&gt;, which applies to &lt;code&gt;SetResultError&lt;/code&gt;.&lt;/p&gt;</description></item><item><title/><link>https://resty.dev/docs/save-response/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/save-response/</guid><description>&lt;h1 id="save-response"&gt;Save Response&lt;a class="anchor" href="#save-response"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Resty provides a simple method for saving/downloading HTTP responses to the file system.&lt;/p&gt;
&lt;blockquote class='book-hint note'&gt;
&lt;p&gt;Resty v3 adds -&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ability to determine the filename automatically from the response in the following order -
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetResponseSaveFileName" rel="external" target="_blank"&gt;Request.SetResponseSaveFileName&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Header &lt;code&gt;Content-Disposition&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;Content-Disposition filename values are sanitized before use. Absolute paths and parent-directory traversal segments are rejected.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Request URL using &lt;code&gt;path.Base&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Request URL hostname if path is empty or &amp;ldquo;/&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Ability to use &lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetResult" rel="external" target="_blank"&gt;Request.SetResult&lt;/a&gt; and &lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetResultError" rel="external" target="_blank"&gt;Request.SetResultError&lt;/a&gt; together with save response by enabling &lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetResponseBodyUnlimitedReads" rel="external" target="_blank"&gt;Request.SetResponseBodyUnlimitedReads&lt;/a&gt;, refer to &lt;a href="https://resty.dev/docs/unlimited-response-body-reads/"&gt;unlimited response reads&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;blockquote class="book-hint info"&gt;
 &lt;p&gt;
 &lt;strong&gt;NOTE:&lt;/strong&gt; Client-level settings can be overridden at the request level.
 &lt;/p&gt;</description></item><item><title/><link>https://resty.dev/docs/root-certificates/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/root-certificates/</guid><description>&lt;h1 id="root-certificates"&gt;Root Certificates&lt;a class="anchor" href="#root-certificates"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Resty offers a convenient method to add &lt;code&gt;root&lt;/code&gt; certificates.&lt;/p&gt;
&lt;blockquote class='book-hint note'&gt;
&lt;ul&gt;
&lt;li&gt;Starting in v3, Resty can use a watcher to reload certificates dynamically at configured intervals when files are modified.&lt;/li&gt;
&lt;li&gt;Default watcher reload interval is 24 hours.&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;h2 id="examples"&gt;Examples&lt;a class="anchor" href="#examples"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="from-file"&gt;From File&lt;a class="anchor" href="#from-file"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// one pem file path&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client.&lt;span style="color:#57c7ff"&gt;SetRootCertificates&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;/path/to/root/pemFile.pem&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// one or more PEM file paths&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client.&lt;span style="color:#57c7ff"&gt;SetRootCertificates&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;/path/to/root/pemFile1.pem&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;/path/to/root/pemFile2.pem&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;/path/to/root/pemFile3.pem&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// if you already have a string slice&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client.&lt;span style="color:#57c7ff"&gt;SetRootCertificates&lt;/span&gt;(certs&lt;span style="color:#ff6ac1"&gt;...&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="from-file-with-watcher"&gt;From File with Watcher&lt;a class="anchor" href="#from-file-with-watcher"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// create cert watcher options&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;certWatcherOpts &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; &lt;span style="color:#ff6ac1"&gt;&amp;amp;&lt;/span&gt;resty.CertWatcherOptions{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; PoolInterval: &lt;span style="color:#ff9f43"&gt;12&lt;/span&gt; &lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt; time.Hour, &lt;span style="color:#78787e"&gt;// default value is 24 hours&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// one pem file path&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client.&lt;span style="color:#57c7ff"&gt;SetRootCertificatesWatcher&lt;/span&gt;(certWatcherOpts, &lt;span style="color:#5af78e"&gt;&amp;#34;/path/to/root/pemFile.pem&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// one or more PEM file paths&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client.&lt;span style="color:#57c7ff"&gt;SetRootCertificatesWatcher&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; certWatcherOpts,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;/path/to/root/pemFile1.pem&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;/path/to/root/pemFile2.pem&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;/path/to/root/pemFile3.pem&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// if you already have a string slice&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client.&lt;span style="color:#57c7ff"&gt;SetRootCertificatesWatcher&lt;/span&gt;(certWatcherOpts, certs&lt;span style="color:#ff6ac1"&gt;...&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="from-string"&gt;From String&lt;a class="anchor" href="#from-string"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;myRootCertStr &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; &lt;span style="color:#5af78e"&gt;`-----BEGIN CERTIFICATE-----
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#5af78e"&gt;... cert content ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#5af78e"&gt;-----END CERTIFICATE-----`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client.&lt;span style="color:#57c7ff"&gt;SetRootCertificateFromString&lt;/span&gt;(myRootCertStr)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="methods"&gt;Methods&lt;a class="anchor" href="#methods"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetRootCertificates" rel="external" target="_blank"&gt;Client.SetRootCertificates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetRootCertificatesWatcher" rel="external" target="_blank"&gt;Client.SetRootCertificatesWatcher&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetRootCertificateFromString" rel="external" target="_blank"&gt;Client.SetRootCertificateFromString&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title/><link>https://resty.dev/docs/client-root-certificates/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/client-root-certificates/</guid><description>&lt;h1 id="client-root-certificates"&gt;Client Root Certificates&lt;a class="anchor" href="#client-root-certificates"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Resty offers a convenient method to add &lt;code&gt;client root&lt;/code&gt; certificates.&lt;/p&gt;
&lt;blockquote class='book-hint note'&gt;
&lt;ul&gt;
&lt;li&gt;Starting in v3, Resty can use a watcher to reload certificates dynamically at configured intervals when files are modified.&lt;/li&gt;
&lt;li&gt;Default watcher reload interval is 24 hours.&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;h2 id="examples"&gt;Examples&lt;a class="anchor" href="#examples"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="from-file"&gt;From File&lt;a class="anchor" href="#from-file"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// one pem file path&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client.&lt;span style="color:#57c7ff"&gt;SetClientRootCertificates&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;/path/to/client-root/pemFile.pem&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// one or more PEM file paths&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client.&lt;span style="color:#57c7ff"&gt;SetClientRootCertificates&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;/path/to/client-root/pemFile1.pem&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;/path/to/client-root/pemFile2.pem&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;/path/to/client-root/pemFile3.pem&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// if you already have a string slice&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client.&lt;span style="color:#57c7ff"&gt;SetClientRootCertificates&lt;/span&gt;(certs&lt;span style="color:#ff6ac1"&gt;...&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="from-file-with-watcher"&gt;From File with Watcher&lt;a class="anchor" href="#from-file-with-watcher"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// create cert watcher options&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;certWatcherOpts &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; &lt;span style="color:#ff6ac1"&gt;&amp;amp;&lt;/span&gt;resty.CertWatcherOptions{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; PoolInterval: &lt;span style="color:#ff9f43"&gt;12&lt;/span&gt; &lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt; time.Hour, &lt;span style="color:#78787e"&gt;// default value is 24 hours&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// one pem file path&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client.&lt;span style="color:#57c7ff"&gt;SetClientRootCertificatesWatcher&lt;/span&gt;(certWatcherOpts, &lt;span style="color:#5af78e"&gt;&amp;#34;/path/to/client-root/pemFile.pem&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// one or more PEM file paths&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client.&lt;span style="color:#57c7ff"&gt;SetClientRootCertificatesWatcher&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; certWatcherOpts,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;/path/to/client-root/pemFile1.pem&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;/path/to/client-root/pemFile2.pem&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;/path/to/client-root/pemFile3.pem&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// if you already have a string slice&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client.&lt;span style="color:#57c7ff"&gt;SetClientRootCertificatesWatcher&lt;/span&gt;(certWatcherOpts, certs&lt;span style="color:#ff6ac1"&gt;...&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="from-string"&gt;From String&lt;a class="anchor" href="#from-string"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;myClientRootCertStr &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; &lt;span style="color:#5af78e"&gt;`-----BEGIN CERTIFICATE-----
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#5af78e"&gt;... cert content ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#5af78e"&gt;-----END CERTIFICATE-----`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client.&lt;span style="color:#57c7ff"&gt;SetClientRootCertificateFromString&lt;/span&gt;(myClientRootCertStr)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="methods"&gt;Methods&lt;a class="anchor" href="#methods"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetClientRootCertificates" rel="external" target="_blank"&gt;Client.SetClientRootCertificates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetClientRootCertificatesWatcher" rel="external" target="_blank"&gt;Client.SetClientRootCertificatesWatcher&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetClientRootCertificateFromString" rel="external" target="_blank"&gt;Client.SetClientRootCertificateFromString&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title/><link>https://resty.dev/docs/client-certificates/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/client-certificates/</guid><description>&lt;h1 id="client-certificates"&gt;Client Certificates&lt;a class="anchor" href="#client-certificates"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Resty provides a convenient method to add &lt;code&gt;client&lt;/code&gt; certificates for SSL Client authentication.&lt;/p&gt;
&lt;h2 id="examples"&gt;Examples&lt;a class="anchor" href="#examples"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="from-file"&gt;From File&lt;a class="anchor" href="#from-file"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// pass the public/private key pair file paths.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// the files must contain PEM-encoded data&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client.&lt;span style="color:#57c7ff"&gt;SetCertificateFromFile&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;certs/client.pem&amp;#34;&lt;/span&gt;, &lt;span style="color:#5af78e"&gt;&amp;#34;certs/client.key&amp;#34;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="from-string"&gt;From String&lt;a class="anchor" href="#from-string"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;myClientCertStr &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; &lt;span style="color:#5af78e"&gt;`-----BEGIN CERTIFICATE-----
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#5af78e"&gt;... cert content ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#5af78e"&gt;-----END CERTIFICATE-----`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;myClientCertKeyStr &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; &lt;span style="color:#5af78e"&gt;`-----BEGIN PRIVATE KEY-----
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#5af78e"&gt;... cert key content ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#5af78e"&gt;-----END PRIVATE KEY-----`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client.&lt;span style="color:#57c7ff"&gt;SetCertificateFromString&lt;/span&gt;(myClientCertStr, myClientCertKeyStr)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="from-certificates"&gt;From Certificates&lt;a class="anchor" href="#from-certificates"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// loading public/private key pair from files. The files must contain PEM-encoded data.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cert, err &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; tls.&lt;span style="color:#57c7ff"&gt;LoadX509KeyPair&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;certs/client.pem&amp;#34;&lt;/span&gt;, &lt;span style="color:#5af78e"&gt;&amp;#34;certs/client.key&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;if&lt;/span&gt; err &lt;span style="color:#ff6ac1"&gt;!=&lt;/span&gt; &lt;span style="color:#ff6ac1"&gt;nil&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; log.&lt;span style="color:#57c7ff"&gt;Printf&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;ERROR while loading client certificate: %v&amp;#34;&lt;/span&gt;, err)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff6ac1"&gt;return&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// add client certificate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client.&lt;span style="color:#57c7ff"&gt;SetCertificates&lt;/span&gt;(cert)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// add one or more certificates&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client.&lt;span style="color:#57c7ff"&gt;SetCertificates&lt;/span&gt;(cert1, cert2, cert3)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="methods"&gt;Methods&lt;a class="anchor" href="#methods"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetCertificates" rel="external" target="_blank"&gt;Client.SetCertificates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetCertificateFromFile" rel="external" target="_blank"&gt;Client.SetCertificateFromFile&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetCertificateFromString" rel="external" target="_blank"&gt;Client.SetCertificateFromString&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title/><link>https://resty.dev/docs/content-decompresser/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/content-decompresser/</guid><description>&lt;h1 id="content-decompresser"&gt;Content Decompresser&lt;a class="anchor" href="#content-decompresser"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Resty v3 provides an extensible way to handle Response content decompression. Out-of-the-box, it handles &lt;code&gt;gzip&lt;/code&gt; and &lt;code&gt;deflate&lt;/code&gt; decompress.&lt;/p&gt;
&lt;blockquote class='book-hint note'&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;User-defined decompresser takes priority over default ones.&lt;/li&gt;
&lt;li&gt;Add method overwrites decompresser if &lt;code&gt;decompress&lt;/code&gt; directive/key already exists.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding" rel="external" target="_blank"&gt;Content-Encoding directive/key&lt;/a&gt; is important while adding decompresser.&lt;/li&gt;
&lt;li&gt;Content-Encoding values as re case-insensitive per &lt;a href="https://www.rfc-editor.org/rfc/rfc9110#section-8.4.1" rel="external" target="_blank"&gt;RFC 9110 Section 8.4.1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;h2 id="example"&gt;Example&lt;a class="anchor" href="#example"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Refer to the example section for &lt;a href="https://resty.dev/docs/example/decompress-brotli/"&gt;Brotli (br)&lt;/a&gt; and &lt;a href="https://resty.dev/docs/example/decompress-zstandard/"&gt;Zstandard (zstd)&lt;/a&gt; decompress.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;New&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;defer&lt;/span&gt; c.&lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c.&lt;span style="color:#57c7ff"&gt;AddContentDecompresser&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;decompress directive/key here&amp;#34;&lt;/span&gt;, &lt;span style="color:#ff5c57"&gt;func&lt;/span&gt;(r io.ReadCloser) (io.ReadCloser, &lt;span style="color:#9aedfe"&gt;error&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#78787e"&gt;// logic goes here&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff6ac1"&gt;return&lt;/span&gt; &lt;span style="color:#ff6ac1"&gt;nil&lt;/span&gt;, &lt;span style="color:#ff6ac1"&gt;nil&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="methods"&gt;Methods&lt;a class="anchor" href="#methods"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.AddContentDecompresser" rel="external" target="_blank"&gt;Client.AddContentDecompresser&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetContentDecompresserKeys" rel="external" target="_blank"&gt;Client.SetContentDecompresserKeys&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.ContentDecompressers" rel="external" target="_blank"&gt;Client.ContentDecompressers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.ContentDecompresserKeys" rel="external" target="_blank"&gt;Client.ContentDecompresserKeys&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Content-Type {Encoder, Decoder}</title><link>https://resty.dev/docs/content-type-encoder-and-decoder/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/content-type-encoder-and-decoder/</guid><description>&lt;h1 id="content-type-encoder-decoder"&gt;Content-Type {Encoder, Decoder}&lt;a class="anchor" href="#content-type-encoder-decoder"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Resty v3 provides an extensible way to handle Request and Response content types. Out-of-the-box, it handles using Go built-in package -&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;JSON&lt;/code&gt; content-type using &lt;a href="https://pkg.go.dev/encoding/json#Encoder" rel="external" target="_blank"&gt;&lt;code&gt;json.Encoder&lt;/code&gt;&lt;/a&gt; and &lt;a href="https://pkg.go.dev/encoding/json#Decoder" rel="external" target="_blank"&gt;&lt;code&gt;json.Decoder&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;XML&lt;/code&gt; content-type using &lt;a href="https://pkg.go.dev/encoding/xml#Encoder" rel="external" target="_blank"&gt;&lt;code&gt;xml.Encoder&lt;/code&gt;&lt;/a&gt; and &lt;a href="https://pkg.go.dev/encoding/xml#Decoder" rel="external" target="_blank"&gt;&lt;code&gt;xml.Decoder&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote class='book-hint note'&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;User-defined encoder/decoder takes priority over default ones.&lt;/li&gt;
&lt;li&gt;Add method overwrites encoder/decoder if &lt;code&gt;Content-Type&lt;/code&gt; key already exists.&lt;/li&gt;
&lt;li&gt;Resty v3 uses a streaming approach by default to handle JSON and XML content types, improving memory efficiency. Resty also provides the &lt;a href="#in-memory-marshal-and-unmarshal"&gt;In-Memory Marshal and Unmarshal&lt;/a&gt; section.&lt;/li&gt;
&lt;li&gt;Content-Type encoder and decoder keys are case-insensitive.&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;h2 id="examples"&gt;Examples&lt;a class="anchor" href="#examples"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;New&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;defer&lt;/span&gt; c.&lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c.&lt;span style="color:#57c7ff"&gt;AddContentTypeEncoder&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;http content type key here&amp;#34;&lt;/span&gt;, &lt;span style="color:#ff5c57"&gt;func&lt;/span&gt;(w io.Writer, v &lt;span style="color:#9aedfe"&gt;any&lt;/span&gt;) &lt;span style="color:#9aedfe"&gt;error&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#78787e"&gt;// logic goes here&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff6ac1"&gt;return&lt;/span&gt; &lt;span style="color:#ff6ac1"&gt;nil&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;})
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c.&lt;span style="color:#57c7ff"&gt;AddContentTypeDecoder&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;http content type key here&amp;#34;&lt;/span&gt;, &lt;span style="color:#ff5c57"&gt;func&lt;/span&gt;(r io.Reader, v &lt;span style="color:#9aedfe"&gt;any&lt;/span&gt;) &lt;span style="color:#9aedfe"&gt;error&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#78787e"&gt;// logic goes here&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff6ac1"&gt;return&lt;/span&gt; &lt;span style="color:#ff6ac1"&gt;nil&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="in-memory-marshal-and-unmarshal"&gt;In Memory Marshal and Unmarshal&lt;a class="anchor" href="#in-memory-marshal-and-unmarshal"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Resty v3 provides in-memory marshal and unmarshal for &lt;code&gt;JSON&lt;/code&gt; and &lt;code&gt;XML&lt;/code&gt; content types using Go’s built-in packages.&lt;/p&gt;</description></item><item><title/><link>https://resty.dev/docs/request-middleware/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/request-middleware/</guid><description>&lt;h1 id="request-middleware"&gt;Request Middleware&lt;a class="anchor" href="#request-middleware"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Resty provides request middleware that enables logic execution during the request preparation phase.&lt;/p&gt;
&lt;p&gt;Out of the box, Resty provides:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#MiddlewareRequestCreate" rel="external" target="_blank"&gt;MiddlewareRequestCreate&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote class='book-hint note'&gt;
&lt;ul&gt;
&lt;li&gt;v3 introduces a fully composable middleware feature that allows the registration of request middleware in any order to accommodate practical use cases.&lt;/li&gt;
&lt;li&gt;v3 introduces the &lt;a href="https://pkg.go.dev/resty.dev/v3#Request.Funcs" rel="external" target="_blank"&gt;Request.Funcs&lt;/a&gt; feature, which can help with request instance manipulation.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;Request.RawRequest&lt;/code&gt; instance is available after &lt;code&gt;MiddlewareRequestCreate&lt;/code&gt; middleware execution.&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;h2 id="examples"&gt;Examples&lt;a class="anchor" href="#examples"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="typical-use"&gt;Typical Use&lt;a class="anchor" href="#typical-use"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Adds middleware before the default request middleware.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;non-nil&lt;/code&gt; error return value terminates the request preparation phase.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client.&lt;span style="color:#57c7ff"&gt;AddRequestMiddleware&lt;/span&gt;(&lt;span style="color:#ff5c57"&gt;func&lt;/span&gt;(c &lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;resty.Client, req &lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;resty.Request) &lt;span style="color:#9aedfe"&gt;error&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#78787e"&gt;// perform logic here&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff6ac1"&gt;return&lt;/span&gt; &lt;span style="color:#ff6ac1"&gt;nil&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="advanced-use"&gt;Advanced Use&lt;a class="anchor" href="#advanced-use"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Users can register &lt;code&gt;N&lt;/code&gt; request middleware functions in an order appropriate for the use case.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;non-nil&lt;/code&gt; error return value terminates the request preparation phase.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;New&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;defer&lt;/span&gt; c.&lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c.&lt;span style="color:#57c7ff"&gt;SetRequestMiddlewares&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Custom1RequestMiddleware,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Custom2RequestMiddleware,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; resty.MiddlewareRequestCreate, &lt;span style="color:#78787e"&gt;// after this, `Request.RawRequest` instance is available&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Custom3RequestMiddleware,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Custom4RequestMiddleware,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="methods"&gt;Methods&lt;a class="anchor" href="#methods"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#RequestMiddleware" rel="external" target="_blank"&gt;RequestMiddleware&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#RequestFunc" rel="external" target="_blank"&gt;RequestFunc&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="client"&gt;Client&lt;a class="anchor" href="#client"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.AddRequestMiddleware" rel="external" target="_blank"&gt;Client.AddRequestMiddleware&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetRequestMiddlewares" rel="external" target="_blank"&gt;Client.SetRequestMiddlewares&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="request"&gt;Request&lt;a class="anchor" href="#request"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.Funcs" rel="external" target="_blank"&gt;Request.Funcs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title/><link>https://resty.dev/docs/response-middleware/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/response-middleware/</guid><description>&lt;h1 id="response-middleware"&gt;Response Middleware&lt;a class="anchor" href="#response-middleware"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Resty provides response middleware that lets you run logic after receiving a response.&lt;/p&gt;
&lt;p&gt;Out of the box, Resty provides:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#MiddlewareResponseAutoParse" rel="external" target="_blank"&gt;MiddlewareResponseAutoParse&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#MiddlewareResponseSaveToFile" rel="external" target="_blank"&gt;MiddlewareResponseSaveToFile&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote class='book-hint note'&gt;
&lt;ul&gt;
&lt;li&gt;v3 introduces a fully composable middleware feature that allows the registration of response middleware in any order to accommodate practical use cases.&lt;/li&gt;
&lt;li&gt;v3 introduces the capability to cascade an error within the response middleware execution chain.&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;h2 id="examples"&gt;Examples&lt;a class="anchor" href="#examples"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="typical-use"&gt;Typical Use&lt;a class="anchor" href="#typical-use"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Adds middleware after the default response middleware.&lt;/li&gt;
&lt;li&gt;Cascades errors returned by response middleware downstream via &lt;code&gt;Response.CascadeError&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client.&lt;span style="color:#57c7ff"&gt;AddResponseMiddleware&lt;/span&gt;(&lt;span style="color:#ff5c57"&gt;func&lt;/span&gt;(c &lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;resty.Client, res &lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;resty.Response) &lt;span style="color:#9aedfe"&gt;error&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#78787e"&gt;// perform logic here&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#78787e"&gt;// cascade error downstream&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#78787e"&gt;// return errors.New(&amp;#34;hey error occurred&amp;#34;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff6ac1"&gt;return&lt;/span&gt; &lt;span style="color:#ff6ac1"&gt;nil&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="advanced-use"&gt;Advanced Use&lt;a class="anchor" href="#advanced-use"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Cascades errors returned by response middleware downstream via &lt;code&gt;Response.CascadeError&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;New&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;defer&lt;/span&gt; c.&lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c.&lt;span style="color:#57c7ff"&gt;SetResponseMiddlewares&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Custom1ResponseMiddleware,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Custom2ResponseMiddleware,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; resty.MiddlewareResponseAutoParse, &lt;span style="color:#78787e"&gt;// before this, the body is not read except on the debug flow&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Custom3ResponseMiddleware,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; resty.MiddlewareResponseSaveToFile, &lt;span style="color:#78787e"&gt;// See, Request.SetResponseSaveFileName &amp;amp; Request.SetResponseSaveToFile&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Custom4ResponseMiddleware,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Custom5ResponseMiddleware,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="methods"&gt;Methods&lt;a class="anchor" href="#methods"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#ResponseMiddleware" rel="external" target="_blank"&gt;ResponseMiddleware&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="client"&gt;Client&lt;a class="anchor" href="#client"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.AddResponseMiddleware" rel="external" target="_blank"&gt;Client.AddResponseMiddleware&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetResponseMiddlewares" rel="external" target="_blank"&gt;Client.SetResponseMiddlewares&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title/><link>https://resty.dev/credits/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/credits/</guid><description>&lt;h1 id="credits"&gt;Credits&lt;a class="anchor" href="#credits"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com" rel="external" target="_blank"&gt;GitHub&lt;/a&gt; Source Code hosting&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caddyserver.com" rel="external" target="_blank"&gt;Caddy Server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gohugo.io" rel="external" target="_blank"&gt;Hugo&lt;/a&gt; Static Website Generator&lt;/li&gt;
&lt;li&gt;Customized version of &lt;a href="https://github.com/alex-shpak/hugo-book" rel="external" target="_blank"&gt;hugo-book&lt;/a&gt; theme&lt;/li&gt;
&lt;li&gt;Icons obtained from &lt;a href="https://uxwing.com" rel="external" target="_blank"&gt;UXWing&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;github-icon&lt;/li&gt;
&lt;li&gt;contrast-icon&lt;/li&gt;
&lt;li&gt;timecard-icon&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title/><link>https://resty.dev/docs/allow-payload-on/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/allow-payload-on/</guid><description>&lt;h1 id="allow-payload-on"&gt;Allow Payload On&lt;a class="anchor" href="#allow-payload-on"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;By default, Resty allows request payloads on POST, PUT, and PATCH under &lt;a href="https://datatracker.ietf.org/doc/html/rfc9110.html" rel="external" target="_blank"&gt;RFC 9110&lt;/a&gt; as of June 2022.&lt;/p&gt;
&lt;p&gt;However, GET and DELETE have historically been subject to debate or interpretation. &lt;a href="https://datatracker.ietf.org/doc/html/rfc9110.html" rel="external" target="_blank"&gt;RFC 9110&lt;/a&gt; states:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;request has no generally defined semantics...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;So, by default, Resty disallows request payloads on the GET and DELETE HTTP verbs.&lt;/p&gt;
&lt;p&gt;Some real-world systems use request payloads on GET and DELETE. Resty provides explicit methods to enable payloads for these verbs.&lt;/p&gt;</description></item><item><title/><link>https://resty.dev/docs/authentication/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/authentication/</guid><description>&lt;h1 id="authentication"&gt;Authentication&lt;a class="anchor" href="#authentication"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Resty supports the following authentication and authorization mechanisms for requests.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#basic-auth"&gt;Basic Auth&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#digest-auth"&gt;Digest Auth&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#bearer-auth-token"&gt;Bearer Auth Token&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#custom-auth-header"&gt;Custom Auth Header&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#custom-auth-using-request-middleware"&gt;Custom Auth using Request Middleware&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="basic-auth"&gt;Basic Auth&lt;a class="anchor" href="#basic-auth"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// for all requests&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client.&lt;span style="color:#57c7ff"&gt;SetBasicAuth&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;username&amp;#34;&lt;/span&gt;, &lt;span style="color:#5af78e"&gt;&amp;#34;password&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// for a particular request&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client.&lt;span style="color:#57c7ff"&gt;R&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetBasicAuth&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;username&amp;#34;&lt;/span&gt;, &lt;span style="color:#5af78e"&gt;&amp;#34;password&amp;#34;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="digest-auth"&gt;Digest Auth&lt;a class="anchor" href="#digest-auth"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote class='book-hint note'&gt;
&lt;p&gt;Digest auth is supported only at the client level; create a dedicated client to use it.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Supported QOP -&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;auth&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;auth-int&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Supported Hash Functions&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;MD5&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MD5-sess&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SHA-256&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SHA-256-sess&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SHA-512&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SHA-512-sess&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SHA-512-256&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SHA-512-256-sess&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// for all requests&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client.&lt;span style="color:#57c7ff"&gt;SetDigestAuth&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;username&amp;#34;&lt;/span&gt;, &lt;span style="color:#5af78e"&gt;&amp;#34;password&amp;#34;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="bearer-auth-token"&gt;Bearer Auth Token&lt;a class="anchor" href="#bearer-auth-token"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote class='book-hint note'&gt;
&lt;p&gt;The default auth scheme is &lt;code&gt;Bearer&lt;/code&gt;, which can be changed with &lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetAuthScheme" rel="external" target="_blank"&gt;Client.SetAuthScheme&lt;/a&gt; or &lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetAuthScheme" rel="external" target="_blank"&gt;Request.SetAuthScheme&lt;/a&gt;&lt;/p&gt;</description></item><item><title/><link>https://resty.dev/docs/curl-command/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/curl-command/</guid><description>&lt;h1 id="curl-command"&gt;Curl Command&lt;a class="anchor" href="#curl-command"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Resty provides an option to generate the curl command for the request.&lt;/p&gt;
&lt;p&gt;By default, Resty does not log the curl command in the debug log since it has the potential to leak sensitive data unless explicitly enabled via &lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetCurlCmdDebugLog" rel="external" target="_blank"&gt;Client.SetCurlCmdDebugLog&lt;/a&gt; or &lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetCurlCmdDebugLog" rel="external" target="_blank"&gt;Request.SetCurlCmdDebugLog&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote class="book-hint info"&gt;
 &lt;p&gt;
 &lt;strong&gt;NOTE:&lt;/strong&gt; Client-level settings can be overridden at the request level.
 &lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote class='book-hint warning'&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Potential to leak sensitive data from &lt;a href="https://pkg.go.dev/resty.dev/v3#Request" rel="external" target="_blank"&gt;Request&lt;/a&gt; and &lt;a href="https://pkg.go.dev/resty.dev/v3#Response" rel="external" target="_blank"&gt;Response&lt;/a&gt; in the debug log when the debug log option is enabled.&lt;/li&gt;
&lt;li&gt;Additional memory usage since the request body was reread.&lt;/li&gt;
&lt;li&gt;curl body is not generated for &lt;code&gt;io.Reader&lt;/code&gt; and multipart request flow.&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;h2 id="example"&gt;Example&lt;a class="anchor" href="#example"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;New&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;defer&lt;/span&gt; c.&lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;res, _ &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; c.&lt;span style="color:#57c7ff"&gt;R&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetGenerateCurlCmd&lt;/span&gt;(&lt;span style="color:#ff6ac1"&gt;true&lt;/span&gt;).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetBody&lt;/span&gt;(&lt;span style="color:#ff5c57"&gt;map&lt;/span&gt;[&lt;span style="color:#9aedfe"&gt;string&lt;/span&gt;]&lt;span style="color:#9aedfe"&gt;string&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style="color:#5af78e"&gt;&amp;#34;Resty&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;Post&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;https://httpbin.org/post&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curlCmdStr &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; res.Request.&lt;span style="color:#57c7ff"&gt;CurlCmd&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(curlCmdStr)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// Result:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// curl -X POST -H &amp;#39;Accept-Encoding: gzip, deflate&amp;#39; -H &amp;#39;Content-Type: application/json&amp;#39; -H &amp;#39;User-Agent: go-resty/3.0.0 (https://resty.dev)&amp;#39; -d &amp;#39;{&amp;#34;name&amp;#34;:&amp;#34;Resty&amp;#34;}&amp;#39; https://httpbin.org/post&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="methods"&gt;Methods&lt;a class="anchor" href="#methods"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="client"&gt;Client&lt;a class="anchor" href="#client"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetCurlCmdGenerate" rel="external" target="_blank"&gt;Client.SetCurlCmdGenerate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetCurlCmdDebugLog" rel="external" target="_blank"&gt;Client.SetCurlCmdDebugLog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="request"&gt;Request&lt;a class="anchor" href="#request"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.CurlCmd" rel="external" target="_blank"&gt;Request.CurlCmd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetCurlCmdGenerate" rel="external" target="_blank"&gt;Request.SetCurlCmdGenerate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetCurlCmdDebugLog" rel="external" target="_blank"&gt;Request.SetCurlCmdDebugLog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title/><link>https://resty.dev/docs/debug-log/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/debug-log/</guid><description>&lt;h1 id="debug-log"&gt;Debug Log&lt;a class="anchor" href="#debug-log"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The debug log provides insights into Resty&amp;rsquo;s request and response details for troubleshooting. v3 introduces debug log formatters, allowing users to customize debug log content for their use cases. Out of the box, the following formatters are available:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#DebugLogFormatter" rel="external" target="_blank"&gt;DebugLogFormatter&lt;/a&gt; (default)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#DebugLogJSONFormatter" rel="external" target="_blank"&gt;DebugLogJSONFormatter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="default-behaviour"&gt;Default Behaviour&lt;a class="anchor" href="#default-behaviour"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Automatically sanitize HTTP headers in both Request and Response if the header key contains &lt;code&gt;authorization&lt;/code&gt;, &lt;code&gt;auth&lt;/code&gt;, or &lt;code&gt;token&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Applies a human-readable debug log formatter.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="examples"&gt;Examples&lt;a class="anchor" href="#examples"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="get-started"&gt;Get Started&lt;a class="anchor" href="#get-started"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// enabling debug for all requests&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;New&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetDebug&lt;/span&gt;(&lt;span style="color:#ff6ac1"&gt;true&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// enabling debug for a particular request&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;req &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; c.&lt;span style="color:#57c7ff"&gt;R&lt;/span&gt;().&lt;span style="color:#57c7ff"&gt;SetDebug&lt;/span&gt;(&lt;span style="color:#ff6ac1"&gt;true&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// few syntactic sugar methods available; see Methods section&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="editing-log-details"&gt;Editing Log Details&lt;a class="anchor" href="#editing-log-details"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Register a debug log callback for any log modification; see &lt;a href="https://pkg.go.dev/resty.dev/v3#DebugLog" rel="external" target="_blank"&gt;DebugLog&lt;/a&gt;.&lt;/p&gt;</description></item><item><title/><link>https://resty.dev/docs/error-handling/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/error-handling/</guid><description>&lt;h1 id="error-handling"&gt;Error Handling&lt;a class="anchor" href="#error-handling"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;In Resty&amp;rsquo;s request and response flow, error handling is crucial. Check and handle errors appropriately.&lt;/p&gt;
&lt;h2 id="possible-area-of-errorsfailures"&gt;Possible Area of Errors/Failures&lt;a class="anchor" href="#possible-area-of-errorsfailures"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Request Errors: Connection, Network, Timeout, Lifecycle, Configuration, and Protocol
&lt;ul&gt;
&lt;li&gt;DNS related (lookup, host not found, etc.)&lt;/li&gt;
&lt;li&gt;Connection related (refused, reset, broken, etc.)&lt;/li&gt;
&lt;li&gt;End of File (socket closed, etc.)&lt;/li&gt;
&lt;li&gt;TLS handshake (negotiation, timeout, etc.)&lt;/li&gt;
&lt;li&gt;URL related (invalid, malformed, etc.)&lt;/li&gt;
&lt;li&gt;Marshalling errors&lt;/li&gt;
&lt;li&gt;Resty validation errors&lt;/li&gt;
&lt;li&gt;Context cancellation errors&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Response Errors: Server Sent HTTP Status Codes
&lt;ul&gt;
&lt;li&gt;Success: Typically indicated by status code 2xx range.&lt;/li&gt;
&lt;li&gt;Failure: Typically indicated by status code 4xx and 5xx range.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Let&amp;rsquo;s take a simple example that covers the errors above.&lt;/p&gt;</description></item><item><title/><link>https://resty.dev/docs/example/custom-dns-resolver/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/example/custom-dns-resolver/</guid><description>&lt;h1 id="custom-dns-resolver"&gt;Custom DNS Resolver&lt;a class="anchor" href="#custom-dns-resolver"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Resty v3 introduces additional methods for creating client instances, including the &lt;a href="https://pkg.go.dev/resty.dev/v3#NewWithDialer" rel="external" target="_blank"&gt;NewWithDialer&lt;/a&gt; function.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;package&lt;/span&gt; main
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;import&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#5af78e"&gt;&amp;#34;context&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#5af78e"&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#5af78e"&gt;&amp;#34;net&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#5af78e"&gt;&amp;#34;time&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#5af78e"&gt;&amp;#34;resty.dev/v3&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff5c57"&gt;func&lt;/span&gt; &lt;span style="color:#57c7ff"&gt;main&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	dialer &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; &lt;span style="color:#ff6ac1"&gt;&amp;amp;&lt;/span&gt;net.Dialer{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		Resolver: &lt;span style="color:#ff6ac1"&gt;&amp;amp;&lt;/span&gt;net.Resolver{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;			PreferGo: &lt;span style="color:#ff6ac1"&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;			Dial: &lt;span style="color:#ff5c57"&gt;func&lt;/span&gt;(ctx context.Context, network, address &lt;span style="color:#9aedfe"&gt;string&lt;/span&gt;) (net.Conn, &lt;span style="color:#9aedfe"&gt;error&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;				d &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; net.Dialer{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;					Timeout: time.&lt;span style="color:#57c7ff"&gt;Duration&lt;/span&gt;(&lt;span style="color:#ff9f43"&gt;20&lt;/span&gt;) &lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt; time.Second,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;				}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;				&lt;span style="color:#ff6ac1"&gt;return&lt;/span&gt; d.&lt;span style="color:#57c7ff"&gt;DialContext&lt;/span&gt;(ctx, &lt;span style="color:#5af78e"&gt;&amp;#34;udp&amp;#34;&lt;/span&gt;, &lt;span style="color:#5af78e"&gt;&amp;#34;9.9.9.9:53&amp;#34;&lt;/span&gt;) &lt;span style="color:#78787e"&gt;// Quad9 DNS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;			},
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		},
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	c &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;NewWithDialer&lt;/span&gt;(dialer)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ff6ac1"&gt;defer&lt;/span&gt; c.&lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	res, err &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; c.&lt;span style="color:#57c7ff"&gt;R&lt;/span&gt;().&lt;span style="color:#57c7ff"&gt;Get&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;https://httpbin.org/get&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(err, res)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title/><link>https://resty.dev/docs/example/decompress-brotli/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/example/decompress-brotli/</guid><description>&lt;h1 id="brotli-decompress"&gt;Brotli Decompress&lt;a class="anchor" href="#brotli-decompress"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Resty v3 allows users to add decompression logic for HTTP responses using their favorite package.&lt;/p&gt;
&lt;blockquote class='book-hint note'&gt;
&lt;p&gt;Using &lt;code&gt;sync.Pool&lt;/code&gt; can reuse the reader and reduce allocation if the package supports &lt;code&gt;Reset&lt;/code&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;h2 id="example-1"&gt;Example 1&lt;a class="anchor" href="#example-1"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Package: &lt;a href="https://github.com/andybalholm/brotli" rel="external" target="_blank"&gt;github.com/andybalholm/brotli&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://pkg.go.dev/github.com/andybalholm/brotli" rel="external" target="_blank"&gt;&lt;img src="https://pkg.go.dev/badge/github.com/andybalholm/brotli.svg" alt="Go Reference" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;New&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;defer&lt;/span&gt; c.&lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// Add decompresser into Resty&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client.&lt;span style="color:#57c7ff"&gt;AddContentDecompresser&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;br&amp;#34;&lt;/span&gt;, decompressBrotli)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// Create Brotli decompress logic&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff5c57"&gt;func&lt;/span&gt; &lt;span style="color:#57c7ff"&gt;decompressBrotli&lt;/span&gt;(r io.ReadCloser) (io.ReadCloser, &lt;span style="color:#9aedfe"&gt;error&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	br &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; &lt;span style="color:#ff6ac1"&gt;&amp;amp;&lt;/span&gt;brotliReader{s: r, r: brotli.&lt;span style="color:#57c7ff"&gt;NewReader&lt;/span&gt;(r)}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ff6ac1"&gt;return&lt;/span&gt; br, &lt;span style="color:#ff6ac1"&gt;nil&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff5c57"&gt;type&lt;/span&gt; brotliReader &lt;span style="color:#ff5c57"&gt;struct&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	s io.ReadCloser
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	r &lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;brotli.Reader
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff5c57"&gt;func&lt;/span&gt; (b &lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;brotliReader) &lt;span style="color:#57c7ff"&gt;Read&lt;/span&gt;(p []&lt;span style="color:#9aedfe"&gt;byte&lt;/span&gt;) (n &lt;span style="color:#9aedfe"&gt;int&lt;/span&gt;, err &lt;span style="color:#9aedfe"&gt;error&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ff6ac1"&gt;return&lt;/span&gt; b.r.&lt;span style="color:#57c7ff"&gt;Read&lt;/span&gt;(p)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff5c57"&gt;func&lt;/span&gt; (b &lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;brotliReader) &lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;() &lt;span style="color:#9aedfe"&gt;error&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ff6ac1"&gt;return&lt;/span&gt; b.s.&lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="example-2"&gt;Example 2&lt;a class="anchor" href="#example-2"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Package: &lt;a href="https://github.com/dsnet/compress" rel="external" target="_blank"&gt;github.com/dsnet/compress&lt;/a&gt;&lt;/p&gt;</description></item><item><title/><link>https://resty.dev/docs/example/decompress-zstandard/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/example/decompress-zstandard/</guid><description>&lt;h1 id="zstandard-decompress"&gt;Zstandard Decompress&lt;a class="anchor" href="#zstandard-decompress"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Resty v3 allows users to add decompression logic for HTTP responses using their favorite package.&lt;/p&gt;
&lt;blockquote class='book-hint note'&gt;
&lt;p&gt;Using &lt;code&gt;sync.Pool&lt;/code&gt; can reuse the reader and reduce allocation if the package supports &lt;code&gt;Reset&lt;/code&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;h2 id="example"&gt;Example&lt;a class="anchor" href="#example"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Package: &lt;a href="https://github.com/klauspost/compress" rel="external" target="_blank"&gt;github.com/klauspost/compress/zstd&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://pkg.go.dev/github.com/klauspost/compress/zstd" rel="external" target="_blank"&gt;&lt;img src="https://pkg.go.dev/badge/github.com/klauspost/compress/zstd.svg" alt="Go Reference" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;New&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;defer&lt;/span&gt; c.&lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// Add decompresser into Resty&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client.&lt;span style="color:#57c7ff"&gt;AddContentDecompresser&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;zstd&amp;#34;&lt;/span&gt;, decompressZstd)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// Create Zstandard decompress logic&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff5c57"&gt;func&lt;/span&gt; &lt;span style="color:#57c7ff"&gt;decompressZstd&lt;/span&gt;(r io.ReadCloser) (io.ReadCloser, &lt;span style="color:#9aedfe"&gt;error&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	zr, err &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; zstd.&lt;span style="color:#57c7ff"&gt;NewReader&lt;/span&gt;(r)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ff6ac1"&gt;if&lt;/span&gt; err &lt;span style="color:#ff6ac1"&gt;!=&lt;/span&gt; &lt;span style="color:#ff6ac1"&gt;nil&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#ff6ac1"&gt;return&lt;/span&gt; &lt;span style="color:#ff6ac1"&gt;nil&lt;/span&gt;, err
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	z &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; &lt;span style="color:#ff6ac1"&gt;&amp;amp;&lt;/span&gt;zstdReader{s: r, r: zr}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ff6ac1"&gt;return&lt;/span&gt; z, &lt;span style="color:#ff6ac1"&gt;nil&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff5c57"&gt;type&lt;/span&gt; zstdReader &lt;span style="color:#ff5c57"&gt;struct&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	s io.ReadCloser
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	r &lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;zstd.Decoder
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff5c57"&gt;func&lt;/span&gt; (b &lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;zstdReader) &lt;span style="color:#57c7ff"&gt;Read&lt;/span&gt;(p []&lt;span style="color:#9aedfe"&gt;byte&lt;/span&gt;) (n &lt;span style="color:#9aedfe"&gt;int&lt;/span&gt;, err &lt;span style="color:#9aedfe"&gt;error&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ff6ac1"&gt;return&lt;/span&gt; b.r.&lt;span style="color:#57c7ff"&gt;Read&lt;/span&gt;(p)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff5c57"&gt;func&lt;/span&gt; (b &lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;zstdReader) &lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;() &lt;span style="color:#9aedfe"&gt;error&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	b.r.&lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ff6ac1"&gt;return&lt;/span&gt; b.s.&lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title/><link>https://resty.dev/docs/example/redirect-history/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/example/redirect-history/</guid><description>&lt;h1 id="redirect-history"&gt;Redirect History&lt;a class="anchor" href="#redirect-history"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Resty v3 adds the redirect history feature to the response.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Method &lt;a href="https://pkg.go.dev/resty.dev/v3#Response.RedirectHistory" rel="external" target="_blank"&gt;Response.RedirectHistory&lt;/a&gt; returns &lt;a href="https://pkg.go.dev/resty.dev/v3#RedirectInfo" rel="external" target="_blank"&gt;RedirectInfo&lt;/a&gt; slice.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;package&lt;/span&gt; main
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;import&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#5af78e"&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#5af78e"&gt;&amp;#34;resty.dev/v3&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff5c57"&gt;func&lt;/span&gt; &lt;span style="color:#57c7ff"&gt;main&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	c &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;New&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ff6ac1"&gt;defer&lt;/span&gt; c.&lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	res, _ &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; c.&lt;span style="color:#57c7ff"&gt;R&lt;/span&gt;().&lt;span style="color:#57c7ff"&gt;Get&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;http://resty.dev&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ff6ac1"&gt;for&lt;/span&gt; _, rh &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; &lt;span style="color:#ff6ac1"&gt;range&lt;/span&gt; res.&lt;span style="color:#57c7ff"&gt;RedirectHistory&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(rh.StatusCode, rh.URL)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title/><link>https://resty.dev/docs/form-data/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/form-data/</guid><description>&lt;h1 id="form-data"&gt;Form Data&lt;a class="anchor" href="#form-data"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Resty provides a convenient method to compose form-data requests.&lt;/p&gt;
&lt;blockquote class='book-hint note'&gt;
&lt;ul&gt;
&lt;li&gt;By default, only allowed on payload-supported HTTP verbs, see &lt;a href="https://resty.dev/docs/allow-payload-on/"&gt;allow payload on&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Request &lt;code&gt;Content-Type&lt;/code&gt; set as &lt;code&gt;application/x-www-form-urlencoded&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Form data values are &lt;code&gt;URL-encoded&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;blockquote class="book-hint info"&gt;
 &lt;p&gt;
 &lt;strong&gt;NOTE:&lt;/strong&gt; Client-level settings can be overridden at the request level.
 &lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="examples"&gt;Examples&lt;a class="anchor" href="#examples"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="from-map"&gt;From Map&lt;a class="anchor" href="#from-map"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;New&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;defer&lt;/span&gt; c.&lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// login request&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;res, err &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; c.&lt;span style="color:#57c7ff"&gt;R&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#57c7ff"&gt;SetFormData&lt;/span&gt;(&lt;span style="color:#ff5c57"&gt;map&lt;/span&gt;[&lt;span style="color:#9aedfe"&gt;string&lt;/span&gt;]&lt;span style="color:#9aedfe"&gt;string&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#5af78e"&gt;&amp;#34;username&amp;#34;&lt;/span&gt;: &lt;span style="color:#5af78e"&gt;&amp;#34;myusername&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#5af78e"&gt;&amp;#34;password&amp;#34;&lt;/span&gt;: &lt;span style="color:#5af78e"&gt;&amp;#34;mypassword&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	}).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#57c7ff"&gt;Post&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;https://myapp.com/login&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(err, res)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// followed by profile update&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;res, err &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; c.&lt;span style="color:#57c7ff"&gt;R&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#57c7ff"&gt;SetFormData&lt;/span&gt;(&lt;span style="color:#ff5c57"&gt;map&lt;/span&gt;[&lt;span style="color:#9aedfe"&gt;string&lt;/span&gt;]&lt;span style="color:#9aedfe"&gt;string&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#5af78e"&gt;&amp;#34;first_name&amp;#34;&lt;/span&gt;: &lt;span style="color:#5af78e"&gt;&amp;#34;Jeevanandam&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#5af78e"&gt;&amp;#34;last_name&amp;#34;&lt;/span&gt;: &lt;span style="color:#5af78e"&gt;&amp;#34;M&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#5af78e"&gt;&amp;#34;zip_code&amp;#34;&lt;/span&gt;: &lt;span style="color:#5af78e"&gt;&amp;#34;00001&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#5af78e"&gt;&amp;#34;city&amp;#34;&lt;/span&gt;: &lt;span style="color:#5af78e"&gt;&amp;#34;new city update&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	}).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#57c7ff"&gt;Post&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;https://myapp.com/profile&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(err, res)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="from-urlvalues"&gt;From url.Values&lt;a class="anchor" href="#from-urlvalues"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;New&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;defer&lt;/span&gt; c.&lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// sample multi-value form data&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;criteria &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; url.Values{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;search_criteria&amp;#34;&lt;/span&gt;: []&lt;span style="color:#9aedfe"&gt;string&lt;/span&gt;{&lt;span style="color:#5af78e"&gt;&amp;#34;book&amp;#34;&lt;/span&gt;, &lt;span style="color:#5af78e"&gt;&amp;#34;glass&amp;#34;&lt;/span&gt;, &lt;span style="color:#5af78e"&gt;&amp;#34;pencil&amp;#34;&lt;/span&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;res, err &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; c.&lt;span style="color:#57c7ff"&gt;R&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetFormDataFromValues&lt;/span&gt;(criteria).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;Post&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;https://myapp.com/search&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(err, res)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="methods"&gt;Methods&lt;a class="anchor" href="#methods"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="client"&gt;Client&lt;a class="anchor" href="#client"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetFormData" rel="external" target="_blank"&gt;Client.SetFormData&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="request"&gt;Request&lt;a class="anchor" href="#request"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetFormData" rel="external" target="_blank"&gt;Request.SetFormData&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetFormDataFromValues" rel="external" target="_blank"&gt;Request.SetFormDataFromValues&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title/><link>https://resty.dev/docs/load-balancer-and-service-discovery/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/load-balancer-and-service-discovery/</guid><description>&lt;h1 id="load-balancer-and-service-discovery"&gt;Load Balancer and Service Discovery&lt;a class="anchor" href="#load-balancer-and-service-discovery"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Resty v3 provides new ways to discover the Base URL and client-side load balancing.&lt;/p&gt;
&lt;p&gt;Out of the box, Resty provides two algorithms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#RoundRobin" rel="external" target="_blank"&gt;Round-Robin (RR)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#WeightedRoundRobin" rel="external" target="_blank"&gt;Weighted Round-Robin (WRR)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Resty also supports SRV record discovery using the Weighted Round-Robin algorithm via &lt;a href="https://pkg.go.dev/resty.dev/v3#NewSRVWeightedRoundRobin" rel="external" target="_blank"&gt;NewSRVWeightedRoundRobin&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote class='book-hint note'&gt;
&lt;ul&gt;
&lt;li&gt;Version 2 had an SRV record lookup feature but did not use record weight values. Version 3 respects record weights and uses the appropriate weighted round-robin algorithm.&lt;/li&gt;
&lt;li&gt;Version 3 lets users implement any custom method for determining the Base URL through the &lt;a href="https://pkg.go.dev/resty.dev/v3#LoadBalancer" rel="external" target="_blank"&gt;LoadBalancer&lt;/a&gt; interface.&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;h2 id="examples"&gt;Examples&lt;a class="anchor" href="#examples"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="round-robin"&gt;Round-Robin&lt;a class="anchor" href="#round-robin"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// create a load balancer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// accepts one or more URLs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;rr, err &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;NewRoundRobin&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;https://example1.com&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;https://example2.com&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;https://example3.com&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;if&lt;/span&gt; err &lt;span style="color:#ff6ac1"&gt;!=&lt;/span&gt; &lt;span style="color:#ff6ac1"&gt;nil&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; log.&lt;span style="color:#57c7ff"&gt;Printf&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;ERROR %v&amp;#34;&lt;/span&gt;, err)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff6ac1"&gt;return&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// create Resty client&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;New&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetLoadBalancer&lt;/span&gt;(rr)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;defer&lt;/span&gt; c.&lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// start using the client ...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="weighted-round-robin"&gt;Weighted Round-Robin&lt;a class="anchor" href="#weighted-round-robin"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// create a load balancer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// accepts one or more hosts&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;wrr, err &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;NewWeightedRoundRobin&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff9f43"&gt;3&lt;/span&gt;&lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;time.Second, &lt;span style="color:#78787e"&gt;// recovery duration&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; []&lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;resty.Host{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; BaseURL: &lt;span style="color:#5af78e"&gt;&amp;#34;https://example1.com&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Weight: &lt;span style="color:#ff9f43"&gt;50&lt;/span&gt;, &lt;span style="color:#78787e"&gt;// determines the percentage of requests to this host&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {BaseURL: &lt;span style="color:#5af78e"&gt;&amp;#34;https://example2.com&amp;#34;&lt;/span&gt;, Weight: &lt;span style="color:#ff9f43"&gt;30&lt;/span&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {BaseURL: &lt;span style="color:#5af78e"&gt;&amp;#34;https://example3.com&amp;#34;&lt;/span&gt;, Weight: &lt;span style="color:#ff9f43"&gt;20&lt;/span&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&lt;span style="color:#ff6ac1"&gt;...&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;if&lt;/span&gt; err &lt;span style="color:#ff6ac1"&gt;!=&lt;/span&gt; &lt;span style="color:#ff6ac1"&gt;nil&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; log.&lt;span style="color:#57c7ff"&gt;Printf&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;ERROR %v&amp;#34;&lt;/span&gt;, err)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff6ac1"&gt;return&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// by default, the recovery duration is 120 seconds, which can be changed as follows&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// wrr.SetRecoveryDuration(3 * time.Minute)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// create Resty client&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;New&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetLoadBalancer&lt;/span&gt;(wrr)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;defer&lt;/span&gt; c.&lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// start using the client ...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="srv-weighted-round-robin"&gt;SRV Weighted Round-Robin&lt;a class="anchor" href="#srv-weighted-round-robin"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// create a load balancer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;swrr, err &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;NewSRVWeightedRoundRobin&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;_sample-server&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;tcp&amp;#34;&lt;/span&gt;, &lt;span style="color:#78787e"&gt;// default proto is tcp&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;example.com&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;https&amp;#34;&lt;/span&gt;, &lt;span style="color:#78787e"&gt;// default scheme is https&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;if&lt;/span&gt; err &lt;span style="color:#ff6ac1"&gt;!=&lt;/span&gt; &lt;span style="color:#ff6ac1"&gt;nil&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; log.&lt;span style="color:#57c7ff"&gt;Printf&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;ERROR %v&amp;#34;&lt;/span&gt;, err)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff6ac1"&gt;return&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// by default, the SRV records refresh duration is 180 seconds, which can be changed as follows&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// swrr.SetRefreshDuration(1 * time.Hour)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// by default, the recovery duration is 120 seconds, which can be changed as follows&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// swrr.SetRecoveryDuration(3 * time.Minute)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// create Resty client&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;New&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetLoadBalancer&lt;/span&gt;(swrr)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;defer&lt;/span&gt; c.&lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// start using the client ...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="user-defined-algorithm"&gt;User-defined Algorithm&lt;a class="anchor" href="#user-defined-algorithm"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Version 3 lets users implement any custom method for determining the Base URL through the &lt;a href="https://pkg.go.dev/resty.dev/v3#LoadBalancer" rel="external" target="_blank"&gt;LoadBalancer&lt;/a&gt; interface.&lt;/p&gt;</description></item><item><title/><link>https://resty.dev/docs/multipart/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/multipart/</guid><description>&lt;h1 id="multipart-form-data"&gt;Multipart Form Data&lt;a class="anchor" href="#multipart-form-data"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Resty provides a convenient method to compose multipart form-data or ordered form-data requests.&lt;/p&gt;
&lt;blockquote class='book-hint note'&gt;
&lt;ul&gt;
&lt;li&gt;Only allowed on POST, PUT, and PATCH verbs.&lt;/li&gt;
&lt;li&gt;Starting v3, ordered multipart form data is possible.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetMultipartBoundary" rel="external" target="_blank"&gt;Request.SetMultipartBoundary&lt;/a&gt; can be used to set a custom boundary.&lt;/li&gt;
&lt;li&gt;All form data and multipart methods can be used together.&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;res, err &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; client.&lt;span style="color:#57c7ff"&gt;R&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetMultipartFormData&lt;/span&gt;(&lt;span style="color:#ff5c57"&gt;map&lt;/span&gt;[&lt;span style="color:#9aedfe"&gt;string&lt;/span&gt;]&lt;span style="color:#9aedfe"&gt;string&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;first_name&amp;#34;&lt;/span&gt;: &lt;span style="color:#5af78e"&gt;&amp;#34;Jeevanandam&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;last_name&amp;#34;&lt;/span&gt;: &lt;span style="color:#5af78e"&gt;&amp;#34;M&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;zip_code&amp;#34;&lt;/span&gt;: &lt;span style="color:#5af78e"&gt;&amp;#34;00001&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;Post&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;https://myapp.com/profile&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(err, res)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="ordered-form-data"&gt;Ordered Form Data&lt;a class="anchor" href="#ordered-form-data"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="example-1"&gt;Example 1&lt;a class="anchor" href="#example-1"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;res, err &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; client.&lt;span style="color:#57c7ff"&gt;R&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetMultipartOrderedFormData&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;first_name&amp;#34;&lt;/span&gt;, []&lt;span style="color:#9aedfe"&gt;string&lt;/span&gt;{&lt;span style="color:#5af78e"&gt;&amp;#34;Jeevanandam&amp;#34;&lt;/span&gt;}).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetMultipartOrderedFormData&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;last_name&amp;#34;&lt;/span&gt;, []&lt;span style="color:#9aedfe"&gt;string&lt;/span&gt;{&lt;span style="color:#5af78e"&gt;&amp;#34;M&amp;#34;&lt;/span&gt;}).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetMultipartOrderedFormData&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;zip_code&amp;#34;&lt;/span&gt;, []&lt;span style="color:#9aedfe"&gt;string&lt;/span&gt;{&lt;span style="color:#5af78e"&gt;&amp;#34;00001&amp;#34;&lt;/span&gt;}).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;Post&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;https://myapp.com/profile&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(err, res)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="example-2"&gt;Example 2&lt;a class="anchor" href="#example-2"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// SetMultipartFields can be used for ordered form data&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fields &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; []&lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;resty.MultipartField{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Name: &lt;span style="color:#5af78e"&gt;&amp;#34;field1&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Values: []&lt;span style="color:#9aedfe"&gt;string&lt;/span&gt;{&lt;span style="color:#5af78e"&gt;&amp;#34;field1value1&amp;#34;&lt;/span&gt;, &lt;span style="color:#5af78e"&gt;&amp;#34;field1value2&amp;#34;&lt;/span&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Name: &lt;span style="color:#5af78e"&gt;&amp;#34;field2&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Values: []&lt;span style="color:#9aedfe"&gt;string&lt;/span&gt;{&lt;span style="color:#5af78e"&gt;&amp;#34;field2value1&amp;#34;&lt;/span&gt;, &lt;span style="color:#5af78e"&gt;&amp;#34;field2value2&amp;#34;&lt;/span&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;res, err &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; client.&lt;span style="color:#57c7ff"&gt;R&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetMultipartFields&lt;/span&gt;(fields&lt;span style="color:#ff6ac1"&gt;...&lt;/span&gt;). &lt;span style="color:#78787e"&gt;// it can be combined with SetMultipartOrderedFormData&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;Post&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;https://myapp.com/profile&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(err, res)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="methods"&gt;Methods&lt;a class="anchor" href="#methods"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="request"&gt;Request&lt;a class="anchor" href="#request"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetMultipartFormData" rel="external" target="_blank"&gt;Request.SetMultipartFormData&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetMultipartOrderedFormData" rel="external" target="_blank"&gt;Request.SetMultipartOrderedFormData&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetMultipartBoundary" rel="external" target="_blank"&gt;Request.SetMultipartBoundary&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h1 id="multipart-file-upload"&gt;Multipart File Upload&lt;a class="anchor" href="#multipart-file-upload"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;blockquote class='book-hint note'&gt;
&lt;ul&gt;
&lt;li&gt;By default, Resty streams the content in the request body when a file or &lt;code&gt;io.Reader&lt;/code&gt; is detected in the MultipartField input.&lt;/li&gt;
&lt;li&gt;Only allowed on POST, PUT, and PATCH verbs.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetMultipartBoundary" rel="external" target="_blank"&gt;Request.SetMultipartBoundary&lt;/a&gt; can be used to set a custom boundary.&lt;/li&gt;
&lt;li&gt;All form data and multipart methods can be used together.&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;h2 id="upload"&gt;Upload&lt;a class="anchor" href="#upload"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// add one file&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client.&lt;span style="color:#57c7ff"&gt;R&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetFile&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;my_file&amp;#34;&lt;/span&gt;, &lt;span style="color:#5af78e"&gt;&amp;#34;/path/to/file/sample.pdf&amp;#34;&lt;/span&gt;) &lt;span style="color:#78787e"&gt;// field name and file path&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// add multiple files together&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client.&lt;span style="color:#57c7ff"&gt;R&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetFiles&lt;/span&gt;(&lt;span style="color:#ff5c57"&gt;map&lt;/span&gt;[&lt;span style="color:#9aedfe"&gt;string&lt;/span&gt;]&lt;span style="color:#9aedfe"&gt;string&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#78787e"&gt;// field name and file path&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;my_file1&amp;#34;&lt;/span&gt;: &lt;span style="color:#5af78e"&gt;&amp;#34;/path/to/file/sample1.pdf&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;my_file2&amp;#34;&lt;/span&gt;: &lt;span style="color:#5af78e"&gt;&amp;#34;/path/to/file/sample2.pdf&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;my_file3&amp;#34;&lt;/span&gt;: &lt;span style="color:#5af78e"&gt;&amp;#34;/path/to/file/sample3.pdf&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; })&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="use-ioreader"&gt;Use io.Reader&lt;a class="anchor" href="#use-ioreader"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// adding bytes or io.Reader&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client.&lt;span style="color:#57c7ff"&gt;R&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetFileReader&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;profile_img&amp;#34;&lt;/span&gt;, &lt;span style="color:#78787e"&gt;// field name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;my-profile-img.png&amp;#34;&lt;/span&gt;, &lt;span style="color:#78787e"&gt;// file name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bytes.&lt;span style="color:#57c7ff"&gt;NewReader&lt;/span&gt;(profileImgBytes), &lt;span style="color:#78787e"&gt;// io.Reader&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="with-content-type"&gt;With Content-Type&lt;a class="anchor" href="#with-content-type"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// adding bytes or io.Reader with file content-type&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client.&lt;span style="color:#57c7ff"&gt;R&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetMultipartField&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;profile_img&amp;#34;&lt;/span&gt;, &lt;span style="color:#78787e"&gt;// field name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;my-profile-img.png&amp;#34;&lt;/span&gt;, &lt;span style="color:#78787e"&gt;// file name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;image/png&amp;#34;&lt;/span&gt;, &lt;span style="color:#78787e"&gt;// file content-type&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bytes.&lt;span style="color:#57c7ff"&gt;NewReader&lt;/span&gt;(profileImgBytes), &lt;span style="color:#78787e"&gt;// io.Reader&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="upload-progress"&gt;Upload Progress&lt;a class="anchor" href="#upload-progress"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Resty v3 provides optional live multipart upload progress in bytes. See:&lt;/p&gt;</description></item><item><title/><link>https://resty.dev/docs/new-features-and-enhancements/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/new-features-and-enhancements/</guid><description>&lt;h1 id="new-features-and-enhancements"&gt;New Features and Enhancements&lt;a class="anchor" href="#new-features-and-enhancements"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Override all transport settings and timeout values used by Resty with &lt;a href="https://pkg.go.dev/resty.dev/v3#NewWithTransportSettings" rel="external" target="_blank"&gt;NewWithTransportSettings&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Fully composable &lt;a href="https://resty.dev/docs/request-middleware/"&gt;request&lt;/a&gt; and &lt;a href="https://resty.dev/docs/response-middleware/"&gt;response&lt;/a&gt; middleware&lt;/li&gt;
&lt;li&gt;&lt;a href="https://resty.dev/docs/content-type-encoder-and-decoder/"&gt;Content-Type {Encoder, Decoder}&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://resty.dev/docs/content-decompresser/"&gt;Content Decompresser&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://resty.dev/docs/resilience/circuit-breaker/"&gt;Circuit Breaker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://resty.dev/docs/multipart/"&gt;Multipart&lt;/a&gt; streaming and &lt;a href="https://resty.dev/docs/multipart/#upload-progress"&gt;upload progress&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://resty.dev/docs/load-balancer-and-service-discovery/"&gt;Load Balancer and Service Discovery&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Retry
&lt;ul&gt;
&lt;li&gt;Retry settings at the &lt;a href="https://resty.dev/docs/resilience/retry/#retry-hooks"&gt;request level&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Respects header &lt;code&gt;Retry-After&lt;/code&gt; if present.&lt;/li&gt;
&lt;li&gt;Resets reader on retry request if the &lt;code&gt;io.ReadSeeker&lt;/code&gt; interface is supported.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://resty.dev/docs/root-certificates/"&gt;Root&lt;/a&gt; and &lt;a href="https://resty.dev/docs/client-root-certificates/"&gt;Client Root&lt;/a&gt; certificates support dynamic reload by interval.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://resty.dev/docs/server-sent-events/"&gt;Server-Sent Events&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;SRV lookup now uses a weighted round-robin algorithm and respects weight values from SRV records.&lt;/li&gt;
&lt;li&gt;Ability to set empty header value for &lt;code&gt;User-Agent&lt;/code&gt; and &lt;code&gt;Accept-Encoding&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Ability to set &lt;code&gt;TLSClientConfig&lt;/code&gt; on custom RoundTripper via &lt;a href="https://resty.dev/docs/example/tls-client-config-on-custom-roundtriper/"&gt;TLSClientConfiger interface&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Adds retry trace IDs and attempt details to the debug log.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://resty.dev/docs/authentication/#digest-auth"&gt;Digest Auth&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Internal flow improvements and optimizations.&lt;/li&gt;
&lt;li&gt;Adds &lt;code&gt;auth-int&lt;/code&gt; QOP support.&lt;/li&gt;
&lt;li&gt;Adds new hash functions &lt;code&gt;SHA-512&lt;/code&gt; and &lt;code&gt;SHA-512-sess&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Updates hash functions for &lt;code&gt;SHA-512-256&lt;/code&gt; and &lt;code&gt;SHA-512-256-sess&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Adds Request level &lt;a href="https://resty.dev/docs/resilience/timeout/"&gt;timeout&lt;/a&gt; support.&lt;/li&gt;
&lt;li&gt;Adds the ability to determine the filename automatically from the response for &lt;a href="https://resty.dev/docs/save-response/"&gt;saving the response&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://resty.dev/docs/debug-log/"&gt;Debug Log&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Adds a debug log formatter with built-in human-readable and JSON formats.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Client hook functions now use variadic arguments, making it easy to supply one or more values.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://resty.dev/docs/any-value-methods/"&gt;Any Value Methods&lt;/a&gt; - convenience methods (&lt;code&gt;*Any&lt;/code&gt; variants) that accept &lt;code&gt;any&lt;/code&gt; type values and auto-convert to strings for headers, query params, and path params.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="new-ways-to-create-client"&gt;New ways to create Client&lt;a class="anchor" href="#new-ways-to-create-client"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#NewWithTransportSettings" rel="external" target="_blank"&gt;NewWithTransportSettings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#NewWithDialer" rel="external" target="_blank"&gt;NewWithDialer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#NewWithDialerAndTransportSettings" rel="external" target="_blank"&gt;NewWithDialerAndTransportSettings&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="client"&gt;Client&lt;a class="anchor" href="#client"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.Close" rel="external" target="_blank"&gt;Client.Close&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetRequestMiddlewares" rel="external" target="_blank"&gt;Client.SetRequestMiddlewares&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetResponseMiddlewares" rel="external" target="_blank"&gt;Client.SetResponseMiddlewares&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.AddContentTypeEncoder" rel="external" target="_blank"&gt;Client.AddContentTypeEncoder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.AddContentTypeDecoder" rel="external" target="_blank"&gt;Client.AddContentTypeDecoder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetResponseBodyUnlimitedReads" rel="external" target="_blank"&gt;Client.SetResponseBodyUnlimitedReads&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.ContentDecompressor" rel="external" target="_blank"&gt;Client.ContentDecompressor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.ContentDecompressors" rel="external" target="_blank"&gt;Client.ContentDecompressors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.AddContentDecompressor" rel="external" target="_blank"&gt;Client.AddContentDecompressor&lt;/a&gt; - Automatically handles &lt;code&gt;gzip&lt;/code&gt; and &lt;code&gt;deflate&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.ContentDecompressorKeys" rel="external" target="_blank"&gt;Client.ContentDecompressorKeys&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetContentDecompressorKeys" rel="external" target="_blank"&gt;Client.SetContentDecompressorKeys&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.Context" rel="external" target="_blank"&gt;Client.Context&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetContext" rel="external" target="_blank"&gt;Client.SetContext&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.Clone" rel="external" target="_blank"&gt;Client.Clone&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.IsTrace" rel="external" target="_blank"&gt;Client.IsTrace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.IsDisableWarn" rel="external" target="_blank"&gt;Client.IsDisableWarn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.IsMethodDeleteAllowPayload" rel="external" target="_blank"&gt;Client.IsMethodDeleteAllowPayload&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetMethodDeleteAllowPayload" rel="external" target="_blank"&gt;Client.SetMethodDeleteAllowPayload&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.RetryDelayStrategy" rel="external" target="_blank"&gt;Client.RetryDelayStrategy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetRetryDelayStrategy" rel="external" target="_blank"&gt;Client.SetRetryDelayStrategy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.IsRetryDefaultConditions" rel="external" target="_blank"&gt;Client.IsRetryDefaultConditions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetRetryDefaultConditions" rel="external" target="_blank"&gt;Client.SetRetryDefaultConditions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetRetryAllowNonIdempotent" rel="external" target="_blank"&gt;Client.SetRetryAllowNonIdempotent&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.IsResponseSaveToFile" rel="external" target="_blank"&gt;Client.IsResponseSaveToFile&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetResponseSaveToFile" rel="external" target="_blank"&gt;Client.SetResponseSaveToFile&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetCurlCmdGenerate" rel="external" target="_blank"&gt;Client.SetCurlCmdGenerate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetCurlCmdDebugLog" rel="external" target="_blank"&gt;Client.SetCurlCmdDebugLog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetRootCertificatesWatcher" rel="external" target="_blank"&gt;Client.SetRootCertificatesWatcher&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetClientRootCertificatesWatcher" rel="external" target="_blank"&gt;Client.SetClientRootCertificatesWatcher&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetCertificateFromFile" rel="external" target="_blank"&gt;Client.SetCertificateFromFile&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetCertificateFromString" rel="external" target="_blank"&gt;Client.SetCertificateFromString&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetQueryParamsUnescape" rel="external" target="_blank"&gt;Client.SetQueryParamsUnescape&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.OnDebugLog" rel="external" target="_blank"&gt;Client.OnDebugLog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetDebugLogFormatter" rel="external" target="_blank"&gt;Client.SetDebugLogFormatter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.OnClose" rel="external" target="_blank"&gt;Client.OnClose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetHeaderAny" rel="external" target="_blank"&gt;Client.SetHeaderAny&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetHeaderVerbatimAny" rel="external" target="_blank"&gt;Client.SetHeaderVerbatimAny&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetQueryParamAny" rel="external" target="_blank"&gt;Client.SetQueryParamAny&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetPathParamAny" rel="external" target="_blank"&gt;Client.SetPathParamAny&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetPathRawParamAny" rel="external" target="_blank"&gt;Client.SetPathRawParamAny&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="request"&gt;Request&lt;a class="anchor" href="#request"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.Clone" rel="external" target="_blank"&gt;Request.Clone&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.WithContext" rel="external" target="_blank"&gt;Request.WithContext&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetResponseBodyUnlimitedReads" rel="external" target="_blank"&gt;Request.SetResponseBodyUnlimitedReads&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request" rel="external" target="_blank"&gt;Request.DebugBodyLimit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request" rel="external" target="_blank"&gt;Request.IsTrace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetTrace" rel="external" target="_blank"&gt;Request.SetTrace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.Patch" rel="external" target="_blank"&gt;Request.Patch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.Trace" rel="external" target="_blank"&gt;Request.Trace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetMethod" rel="external" target="_blank"&gt;Request.SetMethod&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetURL" rel="external" target="_blank"&gt;Request.SetURL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetMethodGetAllowPayload" rel="external" target="_blank"&gt;Request.SetMethodGetAllowPayload&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetMethodDeleteAllowPayload" rel="external" target="_blank"&gt;Request.SetMethodDeleteAllowPayload&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request" rel="external" target="_blank"&gt;Request.CorrelationID&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetCorrelationID" rel="external" target="_blank"&gt;Request.SetCorrelationID&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetRetryCount" rel="external" target="_blank"&gt;Request.SetRetryCount&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetRetryWaitTime" rel="external" target="_blank"&gt;Request.SetRetryWaitTime&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetRetryMaxWaitTime" rel="external" target="_blank"&gt;Request.SetRetryMaxWaitTime&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetRetryDelayStrategy" rel="external" target="_blank"&gt;Request.SetRetryDelayStrategy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetRetryDefaultConditions" rel="external" target="_blank"&gt;Request.SetRetryDefaultConditions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetRetryAllowNonIdempotent" rel="external" target="_blank"&gt;Request.SetRetryAllowNonIdempotent&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request" rel="external" target="_blank"&gt;Request.ResponseSaveFileName&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetResponseSaveFileName" rel="external" target="_blank"&gt;Request.SetResponseSaveFileName&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request" rel="external" target="_blank"&gt;Request.IsResponseSaveToFile&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetResponseSaveToFile" rel="external" target="_blank"&gt;Request.SetResponseSaveToFile&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetCurlCmdGenerate" rel="external" target="_blank"&gt;Request.SetCurlCmdGenerate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetCurlCmdDebugLog" rel="external" target="_blank"&gt;Request.SetCurlCmdDebugLog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetQueryParamsUnescape" rel="external" target="_blank"&gt;Request.SetQueryParamsUnescape&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.Funcs" rel="external" target="_blank"&gt;Request.Funcs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetTimeout" rel="external" target="_blank"&gt;Request.SetTimeout&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetHeaderAuthorizationKey" rel="external" target="_blank"&gt;Request.SetHeaderAuthorizationKey&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetHeaderAny" rel="external" target="_blank"&gt;Request.SetHeaderAny&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetHeaderVerbatimAny" rel="external" target="_blank"&gt;Request.SetHeaderVerbatimAny&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetQueryParamAny" rel="external" target="_blank"&gt;Request.SetQueryParamAny&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetPathParamAny" rel="external" target="_blank"&gt;Request.SetPathParamAny&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetPathRawParamAny" rel="external" target="_blank"&gt;Request.SetPathRawParamAny&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="response"&gt;Response&lt;a class="anchor" href="#response"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Response" rel="external" target="_blank"&gt;Response.Body&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Response.Bytes" rel="external" target="_blank"&gt;Response.Bytes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Response" rel="external" target="_blank"&gt;Response.IsRead&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Response" rel="external" target="_blank"&gt;Response.CascadeError&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Response.RedirectHistory" rel="external" target="_blank"&gt;Response.RedirectHistory&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="middleware"&gt;Middleware&lt;a class="anchor" href="#middleware"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Resty v3 exports the middleware functions.&lt;/p&gt;</description></item><item><title/><link>https://resty.dev/docs/rate-limiting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/rate-limiting/</guid><description>&lt;h1 id="rate-limiting"&gt;Rate Limiting&lt;a class="anchor" href="#rate-limiting"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Rate limiting helps control outbound request throughput and protects upstream services from overload.&lt;/p&gt;
&lt;p&gt;In Resty v3, a rate limiter is configured at the client level and is consulted before every request.&lt;/p&gt;
&lt;blockquote class="book-hint info"&gt;
 &lt;p&gt;
 &lt;strong&gt;NOTE:&lt;/strong&gt; Client-level settings can be overridden at the request level.
 &lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="default-behavior"&gt;Default Behavior&lt;a class="anchor" href="#default-behavior"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Rate limiting is disabled by default.&lt;/li&gt;
&lt;li&gt;Rate limiting is evaluated before each request execution.&lt;/li&gt;
&lt;li&gt;If the configured rate limiter returns an error, request execution is aborted with that error.&lt;/li&gt;
&lt;li&gt;Built-in rate limiters block until a slot/token is available or the request context is done.&lt;/li&gt;
&lt;li&gt;Built-in rate limiters return &lt;a href="https://pkg.go.dev/resty.dev/v3#ErrRateLimitExceeded" rel="external" target="_blank"&gt;ErrRateLimitExceeded&lt;/a&gt; when the request context is canceled or reaches its deadline before allowance is granted.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="built-in-rate-limiters"&gt;Built-in Rate Limiters&lt;a class="anchor" href="#built-in-rate-limiters"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Resty provides two ready-to-use rate limiter implementations.&lt;/p&gt;</description></item><item><title/><link>https://resty.dev/docs/redirect-policy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/redirect-policy/</guid><description>&lt;h1 id="redirect-policy"&gt;Redirect Policy&lt;a class="anchor" href="#redirect-policy"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Resty provides easy-to-use redirect policy implementations and can be extended for custom use cases.&lt;/p&gt;
&lt;p&gt;Out of the box, it provides the following redirect policies:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#RedirectNoPolicy" rel="external" target="_blank"&gt;RedirectNoPolicy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#RedirectFlexiblePolicy" rel="external" target="_blank"&gt;RedirectFlexiblePolicy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#RedirectDomainCheckPolicy" rel="external" target="_blank"&gt;RedirectDomainCheckPolicy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#RedirectHeaderStripSensitivePolicy" rel="external" target="_blank"&gt;RedirectHeaderStripSensitivePolicy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote class='book-hint note'&gt;
&lt;ul&gt;
&lt;li&gt;v3 &lt;a href="https://pkg.go.dev/resty.dev/v3#RedirectNoPolicy" rel="external" target="_blank"&gt;RedirectNoPolicy&lt;/a&gt; returns the error &lt;code&gt;http.ErrUseLastResponse&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;v3 does not strip the port from the request URL host for comparison; the request URL host is used as-is.&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;h2 id="example"&gt;Example&lt;a class="anchor" href="#example"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// The default Go client allows up to 10 redirects.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// In Resty, configure it as follows.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client.&lt;span style="color:#57c7ff"&gt;SetRedirectPolicy&lt;/span&gt;(resty.&lt;span style="color:#57c7ff"&gt;RedirectFlexiblePolicy&lt;/span&gt;(&lt;span style="color:#ff9f43"&gt;5&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// set one or more redirect policies together&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client.&lt;span style="color:#57c7ff"&gt;SetRedirectPolicy&lt;/span&gt;(resty.&lt;span style="color:#57c7ff"&gt;RedirectFlexiblePolicy&lt;/span&gt;(&lt;span style="color:#ff9f43"&gt;5&lt;/span&gt;),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; resty.&lt;span style="color:#57c7ff"&gt;RedirectDomainCheckPolicy&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;host1.com&amp;#34;&lt;/span&gt;, &lt;span style="color:#5af78e"&gt;&amp;#34;host2.org&amp;#34;&lt;/span&gt;, &lt;span style="color:#5af78e"&gt;&amp;#34;host3.net&amp;#34;&lt;/span&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="custom-redirect-policy"&gt;Custom Redirect Policy&lt;a class="anchor" href="#custom-redirect-policy"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;There are two ways to implement a redirect policy.&lt;/p&gt;</description></item><item><title/><link>https://resty.dev/docs/request-tracing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/request-tracing/</guid><description>&lt;h1 id="request-tracing"&gt;Request Tracing&lt;a class="anchor" href="#request-tracing"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Request tracing is often used to collect information about HTTP requests. Resty provides simple access to this information. These details include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DNS Lookup Time&lt;/li&gt;
&lt;li&gt;Connection Time&lt;/li&gt;
&lt;li&gt;TCP Connection Time&lt;/li&gt;
&lt;li&gt;TLS Handshake Time&lt;/li&gt;
&lt;li&gt;Server Time&lt;/li&gt;
&lt;li&gt;Response Time&lt;/li&gt;
&lt;li&gt;Total Time&lt;/li&gt;
&lt;li&gt;Whether the connection is reused&lt;/li&gt;
&lt;li&gt;Whether the connection was idle&lt;/li&gt;
&lt;li&gt;Connection idle time&lt;/li&gt;
&lt;li&gt;Request Attempt&lt;/li&gt;
&lt;li&gt;Remote Address&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// create a Resty client&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;New&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;defer&lt;/span&gt; client.&lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;res, _ = client.&lt;span style="color:#57c7ff"&gt;R&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;EnableTrace&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;Get&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;https://httpbin.org/get&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ti &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; res.Request.&lt;span style="color:#57c7ff"&gt;TraceInfo&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// Explore trace info&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;Request Trace Info:&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34; DNSLookup :&amp;#34;&lt;/span&gt;, ti.DNSLookup)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34; ConnTime :&amp;#34;&lt;/span&gt;, ti.ConnTime)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34; TCPConnTime :&amp;#34;&lt;/span&gt;, ti.TCPConnTime)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34; TLSHandshake :&amp;#34;&lt;/span&gt;, ti.TLSHandshake)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34; ServerTime :&amp;#34;&lt;/span&gt;, ti.ServerTime)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34; ResponseTime :&amp;#34;&lt;/span&gt;, ti.ResponseTime)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34; TotalTime :&amp;#34;&lt;/span&gt;, ti.TotalTime)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34; IsConnReused :&amp;#34;&lt;/span&gt;, ti.IsConnReused)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34; IsConnWasIdle :&amp;#34;&lt;/span&gt;, ti.IsConnWasIdle)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34; ConnIdleTime :&amp;#34;&lt;/span&gt;, ti.ConnIdleTime)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34; RequestAttempt:&amp;#34;&lt;/span&gt;, ti.RequestAttempt)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34; RemoteAddr :&amp;#34;&lt;/span&gt;, ti.RemoteAddr.&lt;span style="color:#57c7ff"&gt;String&lt;/span&gt;())
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// Output&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// Request Trace Info:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// DNSLookup : 2.947333ms&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// ConnTime : 198.844375ms&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// TCPConnTime : 63.088834ms&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// TLSHandshake : 132.341ms&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// ServerTime : 64.945166ms&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// ResponseTime : 74.625µs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// TotalTime : 263.774083ms&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// IsConnReused : false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// IsConnWasIdle : false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// ConnIdleTime : 0s&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// RequestAttempt: 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// RemoteAddr : 3.210.94.60:443&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="methods"&gt;Methods&lt;a class="anchor" href="#methods"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="client"&gt;Client&lt;a class="anchor" href="#client"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetTrace" rel="external" target="_blank"&gt;Client.SetTrace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.IsTrace" rel="external" target="_blank"&gt;Client.IsTrace&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="request"&gt;Request&lt;a class="anchor" href="#request"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetTrace" rel="external" target="_blank"&gt;Request.SetTrace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request" rel="external" target="_blank"&gt;Request.IsTrace&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="trace"&gt;Trace&lt;a class="anchor" href="#trace"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#TraceInfo.String" rel="external" target="_blank"&gt;TraceInfo.String&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title/><link>https://resty.dev/docs/resilience/circuit-breaker/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/resilience/circuit-breaker/</guid><description>&lt;h1 id="circuit-breaker"&gt;Circuit Breaker&lt;a class="anchor" href="#circuit-breaker"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Circuit breaker helps prevent cascading failures by temporarily stopping requests to unhealthy upstream services and probing for recovery.&lt;/p&gt;
&lt;p&gt;In Resty v3, the circuit breaker is configured at the client level and checked before each request execution.&lt;/p&gt;
&lt;blockquote class='book-hint note'&gt;
&lt;p&gt;Combining circuit breaker with &lt;a href="https://resty.dev/docs/resilience/retry/"&gt;Retry&lt;/a&gt; provides a comprehensive approach to transient and sustained failures.&lt;/p&gt;&lt;/blockquote&gt;&lt;h2 id="default-behavior"&gt;Default Behavior&lt;a class="anchor" href="#default-behavior"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Circuit breaker is disabled by default.&lt;/li&gt;
&lt;li&gt;When configured, &lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetCircuitBreaker" rel="external" target="_blank"&gt;Client.SetCircuitBreaker&lt;/a&gt; applies to all requests from that client.&lt;/li&gt;
&lt;li&gt;If &lt;a href="https://pkg.go.dev/resty.dev/v3#CircuitBreaker.Allow" rel="external" target="_blank"&gt;CircuitBreaker.Allow&lt;/a&gt; rejects a request, Resty returns &lt;a href="https://pkg.go.dev/resty.dev/v3#ErrCircuitBreakerOpen" rel="external" target="_blank"&gt;ErrCircuitBreakerOpen&lt;/a&gt; immediately and does not execute request middlewares or issue a network call.&lt;/li&gt;
&lt;li&gt;Resty applies breaker policies only when an HTTP response is available.&lt;/li&gt;
&lt;li&gt;In half-open state, only one probe request is allowed in flight at a time.&lt;/li&gt;
&lt;li&gt;On any state transition, breaker counters are reset.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="built-in-circuit-breaker"&gt;Built-in Circuit Breaker&lt;a class="anchor" href="#built-in-circuit-breaker"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Resty provides two built-in circuit breaker implementations.&lt;/p&gt;</description></item><item><title/><link>https://resty.dev/docs/resilience/hedging/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/resilience/hedging/</guid><description>&lt;h1 id="hedging"&gt;Hedging&lt;a class="anchor" href="#hedging"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Hedging is a latency-reduction technique that sends multiple concurrent requests and returns the first response to complete. This approach is particularly effective for handling &amp;ldquo;tail latency&amp;rdquo; - occasional slow responses that can significantly impact application performance.&lt;/p&gt;
&lt;p&gt;Resty v3 provides an extensible &lt;a href="https://pkg.go.dev/resty.dev/v3#Hedger" rel="external" target="_blank"&gt;Hedger&lt;/a&gt; interface.&lt;/p&gt;
&lt;p&gt;Inspired by &lt;a href="https://github.com/cristalhq/hedgedhttp" rel="external" target="_blank"&gt;hedgedhttp&lt;/a&gt; and the paper &lt;a href="https://research.google/pubs/the-tail-at-scale/" rel="external" target="_blank"&gt;Tail at Scale&lt;/a&gt; by Jeffrey Dean, Luiz André Barroso.&lt;/p&gt;
&lt;blockquote class='book-hint note'&gt;
&lt;p&gt;&lt;strong&gt;Hint:&lt;/strong&gt; Hedging is complementary to the &lt;a href="https://resty.dev/docs/resilience/retry/"&gt;Retry Mechanism&lt;/a&gt;. Hedging optimizes latency, while retries handle failures. When hedging is enabled, retry is disabled by default; enable retry explicitly only when needed to avoid overloading your services.&lt;/p&gt;</description></item><item><title/><link>https://resty.dev/docs/resilience/retry/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/resilience/retry/</guid><description>&lt;h1 id="retry"&gt;Retry&lt;a class="anchor" href="#retry"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Retry plays a crucial role in modern system integration by helping handle failures effectively.&lt;/p&gt;
&lt;p&gt;Resty provides exponential backoff with a jitter strategy out of the box; a custom retry strategy can be used to override this default.&lt;/p&gt;
&lt;blockquote class='book-hint note'&gt;
&lt;p&gt;Combining retry with &lt;a href="https://resty.dev/docs/resilience/circuit-breaker/"&gt;Circuit Breaker&lt;/a&gt; provides a comprehensive approach to transient and sustained failures.&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote class="book-hint info"&gt;
 &lt;p&gt;
 &lt;strong&gt;NOTE:&lt;/strong&gt; Client-level settings can be overridden at the request level.
 &lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="default-values"&gt;Default Values&lt;a class="anchor" href="#default-values"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Retry count is &lt;code&gt;0&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;Total retry attempts = &lt;code&gt;first attempt + retry count&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Retry minimum wait time is &lt;code&gt;100ms&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Retry maximum wait time is &lt;code&gt;2000ms&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Retry strategy is exponential backoff with a jitter&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="default-behavior"&gt;Default Behavior&lt;a class="anchor" href="#default-behavior"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Request values are inherited from the client upon creation; they do not refresh during a retry attempt. Therefore, value updates are performed on the request instance via &lt;a href="https://pkg.go.dev/resty.dev/v3#Response" rel="external" target="_blank"&gt;Response.Request&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Applies &lt;a href="#default-conditions"&gt;default retry conditions&lt;/a&gt; before user-defined retry conditions.
&lt;ul&gt;
&lt;li&gt;This can be disabled via &lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetRetryDefaultConditions" rel="external" target="_blank"&gt;Client.SetRetryDefaultConditions&lt;/a&gt; or &lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetRetryDefaultConditions" rel="external" target="_blank"&gt;Request.SetRetryDefaultConditions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Executes request retry conditions first, then client retry conditions, until one returns &lt;code&gt;true&lt;/code&gt;. Remaining conditions are not executed.&lt;/li&gt;
&lt;li&gt;Executes request retry hooks first, then client retry hooks.&lt;/li&gt;
&lt;li&gt;Respects header &lt;code&gt;Retry-After&lt;/code&gt; if present.&lt;/li&gt;
&lt;li&gt;Resets the reader automatically before a retry request if the &lt;code&gt;io.ReadSeeker&lt;/code&gt; interface is supported. Otherwise it throws &lt;a href="https://pkg.go.dev/resty.dev/v3#ErrReaderNotSeekable" rel="external" target="_blank"&gt;ErrReaderNotSeekable&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Retries only idempotent HTTP verbs: GET, HEAD, PUT, DELETE, OPTIONS, and TRACE (&lt;a href="https://datatracker.ietf.org/doc/html/rfc9110.html#name-method-registration" rel="external" target="_blank"&gt;RFC 9110&lt;/a&gt;, &lt;a href="https://datatracker.ietf.org/doc/html/rfc5789.html" rel="external" target="_blank"&gt;RFC 5789&lt;/a&gt;)
&lt;ul&gt;
&lt;li&gt;Use &lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetRetryAllowNonIdempotent" rel="external" target="_blank"&gt;Client.SetRetryAllowNonIdempotent&lt;/a&gt; or &lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetRetryAllowNonIdempotent" rel="external" target="_blank"&gt;Request.SetRetryAllowNonIdempotent&lt;/a&gt;. If additional control is necessary, use a custom retry condition.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request" rel="external" target="_blank"&gt;Request.CorrelationID&lt;/a&gt; - a GUID is generated when retry count &amp;gt; 0&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="retrying-non-idempotent-requests"&gt;Retrying Non-Idempotent Requests&lt;a class="anchor" href="#retrying-non-idempotent-requests"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;By default, Resty retries only idempotent HTTP methods. Setting &lt;code&gt;SetRetryCount&lt;/code&gt; on a client that mostly sends &lt;code&gt;POST&lt;/code&gt; or &lt;code&gt;PATCH&lt;/code&gt; requests will not retry those requests unless non-idempotent retries are explicitly enabled.&lt;/p&gt;</description></item><item><title/><link>https://resty.dev/docs/resilience/timeout/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/resilience/timeout/</guid><description>&lt;h1 id="timeout"&gt;Timeout&lt;a class="anchor" href="#timeout"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Resty v3 allows users to modify all timeout values used by the client.&lt;/p&gt;
&lt;blockquote class="book-hint info"&gt;
 &lt;p&gt;
 &lt;strong&gt;NOTE:&lt;/strong&gt; Client-level settings can be overridden at the request level.
 &lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="examples"&gt;Examples&lt;a class="anchor" href="#examples"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="transport-timeouts"&gt;Transport Timeouts&lt;a class="anchor" href="#transport-timeouts"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;blockquote class='book-hint note'&gt;
&lt;p&gt;Refer to &lt;code&gt;godoc&lt;/code&gt; for all supported fields and their default values: &lt;a href="https://pkg.go.dev/resty.dev/v3#TransportSettings" rel="external" target="_blank"&gt;TransportSettings&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// create transport with timeouts&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// supply only required values; the rest will use default values&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;transportSettings &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; &lt;span style="color:#ff6ac1"&gt;&amp;amp;&lt;/span&gt;resty.TransportSettings{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; IdleConnTimeout: &lt;span style="color:#ff9f43"&gt;120&lt;/span&gt; &lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt; time.Second,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; TLSHandshakeTimeout: &lt;span style="color:#ff9f43"&gt;60&lt;/span&gt; &lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt; time.Second,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;NewWithTransportSettings&lt;/span&gt;(transportSettings)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;defer&lt;/span&gt; c.&lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// start using the client ...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="client-timeout"&gt;Client Timeout&lt;a class="anchor" href="#client-timeout"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;blockquote class='book-hint note'&gt;
&lt;p&gt;Resty v3 does not use &lt;code&gt;http.Client.Timeout&lt;/code&gt;.&lt;/p&gt;</description></item><item><title/><link>https://resty.dev/docs/server-sent-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/server-sent-events/</guid><description>&lt;h1 id="server-sent-events"&gt;Server-Sent Events&lt;a class="anchor" href="#server-sent-events"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Resty v3 adds Server-Sent Events feature. It provides APIs similar to the &lt;a href="https://html.spec.whatwg.org/multipage/server-sent-events.html" rel="external" target="_blank"&gt;specification&lt;/a&gt; and is easy to use.&lt;/p&gt;
&lt;h2 id="examples"&gt;Examples&lt;a class="anchor" href="#examples"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="get-started"&gt;Get Started&lt;a class="anchor" href="#get-started"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sse &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;NewSSESource&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetURL&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;https://sse.dev/test&amp;#34;&lt;/span&gt;).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;OnMessage&lt;/span&gt;(&lt;span style="color:#ff5c57"&gt;func&lt;/span&gt;(e &lt;span style="color:#9aedfe"&gt;any&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(e.(&lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;resty.SSE))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }, &lt;span style="color:#ff6ac1"&gt;nil&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;err &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; sse.&lt;span style="color:#57c7ff"&gt;Get&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(err)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="auto-unmarshalling"&gt;Auto Unmarshalling&lt;a class="anchor" href="#auto-unmarshalling"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// https://sse.dev/test returns&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// {&amp;#34;testing&amp;#34;:true,&amp;#34;sse_dev&amp;#34;:&amp;#34;is great&amp;#34;,&amp;#34;msg&amp;#34;:&amp;#34;It works!&amp;#34;,&amp;#34;now&amp;#34;:1737508994502}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff5c57"&gt;type&lt;/span&gt; Data &lt;span style="color:#ff5c57"&gt;struct&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Testing &lt;span style="color:#9aedfe"&gt;bool&lt;/span&gt; &lt;span style="color:#5af78e"&gt;`json:&amp;#34;testing&amp;#34;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; SSEDev &lt;span style="color:#9aedfe"&gt;string&lt;/span&gt; &lt;span style="color:#5af78e"&gt;`json:&amp;#34;sse_dev&amp;#34;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Message &lt;span style="color:#9aedfe"&gt;string&lt;/span&gt; &lt;span style="color:#5af78e"&gt;`json:&amp;#34;msg&amp;#34;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Now &lt;span style="color:#9aedfe"&gt;int64&lt;/span&gt; &lt;span style="color:#5af78e"&gt;`json:&amp;#34;now&amp;#34;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sse &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;NewSSESource&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetURL&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;https://sse.dev/test&amp;#34;&lt;/span&gt;).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;OnMessage&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff5c57"&gt;func&lt;/span&gt;(e &lt;span style="color:#9aedfe"&gt;any&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; d &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; e.(&lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;Data)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;Testing:&amp;#34;&lt;/span&gt;, d.Testing)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;SSEDev:&amp;#34;&lt;/span&gt;, d.SSEDev)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;Message:&amp;#34;&lt;/span&gt;, d.Message)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;Now:&amp;#34;&lt;/span&gt;, d.Now)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Data{},
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; )
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;err &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; sse.&lt;span style="color:#57c7ff"&gt;Get&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(err)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// Output:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// Testing: true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// SSEDev: is great&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// Message: It works!&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// Now: 1737509497652&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// Testing: true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// SSEDev: is great&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// Message: It works!&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// Now: 1737509499652&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// ...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="multiple-event-types"&gt;Multiple Event Types&lt;a class="anchor" href="#multiple-event-types"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff5c57"&gt;type&lt;/span&gt; UserEvent &lt;span style="color:#ff5c57"&gt;struct&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; UserName &lt;span style="color:#9aedfe"&gt;string&lt;/span&gt; &lt;span style="color:#5af78e"&gt;`json:&amp;#34;username&amp;#34;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Message &lt;span style="color:#9aedfe"&gt;string&lt;/span&gt; &lt;span style="color:#5af78e"&gt;`json:&amp;#34;msg&amp;#34;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Time time.Time &lt;span style="color:#5af78e"&gt;`json:&amp;#34;time&amp;#34;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sse &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;NewSSESource&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetURL&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;https://sse.dev/test&amp;#34;&lt;/span&gt;).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;OnMessage&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff5c57"&gt;func&lt;/span&gt;(e &lt;span style="color:#9aedfe"&gt;any&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(e.(&lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;resty.SSE))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff6ac1"&gt;nil&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;AddEventListener&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;user_connect&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff5c57"&gt;func&lt;/span&gt;(e &lt;span style="color:#9aedfe"&gt;any&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(e.(&lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;UserEvent))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; UserEvent{},
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;AddEventListener&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;user_message&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff5c57"&gt;func&lt;/span&gt;(e &lt;span style="color:#9aedfe"&gt;any&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(e.(&lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;UserEvent))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; UserEvent{},
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; )
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;err &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; sse.&lt;span style="color:#57c7ff"&gt;Get&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(err)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="tls-client-config"&gt;TLS Client Config&lt;a class="anchor" href="#tls-client-config"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The method sets TLSClientConfig for underlying SSE client Transport. Values supported by &lt;a href="https://pkg.go.dev/crypto/tls#Config" rel="external" target="_blank"&gt;https://pkg.go.dev/crypto/tls#Config&lt;/a&gt; can be configured.&lt;/p&gt;</description></item><item><title/><link>https://resty.dev/docs/unlimited-response-body-reads/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/unlimited-response-body-reads/</guid><description>&lt;h1 id="unlimited-response-body-reads"&gt;Unlimited Response Body Reads&lt;a class="anchor" href="#unlimited-response-body-reads"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Resty v3 provides the ability to read HTTP response body unlimited times.&lt;/p&gt;
&lt;blockquote class='book-hint warning'&gt;
&lt;ul&gt;
&lt;li&gt;Keeps the response body in memory, which might cause additional memory usage.&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;blockquote class="book-hint info"&gt;
 &lt;p&gt;
 &lt;strong&gt;NOTE:&lt;/strong&gt; Client-level settings can be overridden at the request level.
 &lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="example"&gt;Example&lt;a class="anchor" href="#example"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The provided code snippet demonstrates:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Response body auto-parsing.&lt;/li&gt;
&lt;li&gt;Saves the response body to the file system.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;loginResponseFile &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;login-response.txt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;res, err &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; client.&lt;span style="color:#57c7ff"&gt;R&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetHeader&lt;/span&gt;(hdrContentTypeKey, &lt;span style="color:#5af78e"&gt;&amp;#34;application/json&amp;#34;&lt;/span&gt;).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetBody&lt;/span&gt;(&lt;span style="color:#ff6ac1"&gt;&amp;amp;&lt;/span&gt;User{Username: &lt;span style="color:#5af78e"&gt;&amp;#34;testuser&amp;#34;&lt;/span&gt;, Password: &lt;span style="color:#5af78e"&gt;&amp;#34;testpass&amp;#34;&lt;/span&gt;}).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetResponseBodyUnlimitedReads&lt;/span&gt;(&lt;span style="color:#ff6ac1"&gt;true&lt;/span&gt;).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetResult&lt;/span&gt;(&lt;span style="color:#ff6ac1"&gt;&amp;amp;&lt;/span&gt;LoginResponse{}).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetOutputFileName&lt;/span&gt;(loginResponseFile).
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;Post&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;/login&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(err)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;loginResponse &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; res.&lt;span style="color:#57c7ff"&gt;Result&lt;/span&gt;().(&lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;LoginResponse)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;ID:&amp;#34;&lt;/span&gt;, loginResponse.ID)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;Message:&amp;#34;&lt;/span&gt;, loginResponse.Message)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;loginResponseCnt, _ &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; os.&lt;span style="color:#57c7ff"&gt;ReadFile&lt;/span&gt;(loginResponseFile)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;File Content:&amp;#34;&lt;/span&gt;, &lt;span style="color:#ff5c57"&gt;string&lt;/span&gt;(loginResponseCnt))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// output:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// nil&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// ID: success&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// Message: login successful&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// File Content: { &amp;#34;id&amp;#34;: &amp;#34;success&amp;#34;, &amp;#34;message&amp;#34;: &amp;#34;login successful&amp;#34; }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="methods"&gt;Methods&lt;a class="anchor" href="#methods"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="client"&gt;Client&lt;a class="anchor" href="#client"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetResponseBodyUnlimitedReads" rel="external" target="_blank"&gt;Client.SetResponseBodyUnlimitedReads&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="request"&gt;Request&lt;a class="anchor" href="#request"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/resty.dev/v3#Request.SetResponseBodyUnlimitedReads" rel="external" target="_blank"&gt;Request.SetResponseBodyUnlimitedReads&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title/><link>https://resty.dev/docs/upgrading-to-v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/upgrading-to-v3/</guid><description>&lt;h1 id="v3-upgrade-guide"&gt;v3 Upgrade Guide&lt;a class="anchor" href="#v3-upgrade-guide"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Resty v3 release brings many new features, enhancements, and breaking changes. This page outlines upgrading Resty to v3.&lt;/p&gt;
&lt;blockquote class='book-hint note'&gt;
&lt;p&gt;Minimum required go version is &lt;code&gt;go1.23&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;h2 id="update-gomod-and-imports"&gt;Update go.mod and imports&lt;a class="anchor" href="#update-gomod-and-imports"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Resty v3 provides a Go vanity URL.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;require resty.dev/v3 v3.0.0-rc.4&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Update imports from v2 to the v3 vanity import path.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;import&lt;/span&gt; &lt;span style="color:#5af78e"&gt;&amp;#34;resty.dev/v3&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="common-migration-patterns"&gt;Common Migration Patterns&lt;a class="anchor" href="#common-migration-patterns"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Common v2-to-v3 changes for client wrappers and API integrations.&lt;/p&gt;
&lt;h3 id="client-lifecycle"&gt;Client lifecycle&lt;a class="anchor" href="#client-lifecycle"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Resty v2 did not have a &lt;code&gt;Client.Close&lt;/code&gt; method. Resty v3 adds one to run close hooks and stop client-owned background resources, such as certificate watchers and load balancers. Do not close the client after each request; for long-lived clients, close it during application shutdown.&lt;/p&gt;</description></item><item><title/><link>https://resty.dev/license/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/license/</guid><description>&lt;h2 id="resty"&gt;Resty&lt;a class="anchor" href="#resty"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Released under &lt;a href="https://github.com/go-resty/resty/blob/v3/LICENSE" rel="external" target="_blank"&gt;MIT License&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="resty-website-and-documentation"&gt;Resty Website and Documentation&lt;a class="anchor" href="#resty-website-and-documentation"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Released under &lt;a href="https://github.com/go-resty/docs/blob/main/LICENSE" rel="external" target="_blank"&gt;Apache-2.0 License&lt;/a&gt;&lt;/p&gt;</description></item><item><title/><link>https://resty.dev/timeline/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/timeline/</guid><description>&lt;h1 id="resty-timeline"&gt;Resty Timeline&lt;a class="anchor" href="#resty-timeline"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Version&lt;/th&gt;
 &lt;th&gt;Release Date&lt;/th&gt;
 &lt;th&gt;Notes&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://github.com/go-resty/resty/releases/tag/v0.1" rel="external" target="_blank"&gt;v0.1&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;Sep 15, 2015&lt;/td&gt;
 &lt;td&gt;Resty&amp;rsquo;s initial release&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://github.com/go-resty/resty/releases/tag/v1.0.0" rel="external" target="_blank"&gt;v1.0.0&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;Sep 25, 2017&lt;/td&gt;
 &lt;td&gt;First major release&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://github.com/go-resty/resty/releases/tag/v1.12.0" rel="external" target="_blank"&gt;v1.12.0&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;Feb 27, 2019&lt;/td&gt;
 &lt;td&gt;Final release of v1 series&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://github.com/go-resty/resty/releases/tag/v2.0.0" rel="external" target="_blank"&gt;v2.0.0&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;Jul 16, 2019&lt;/td&gt;
 &lt;td&gt;Second major release&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://github.com/go-resty/resty/releases/tag/v2.17.2" rel="external" target="_blank"&gt;v2.17.2&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;Feb 14, 2026&lt;/td&gt;
 &lt;td&gt;Final (maybe) release of v2 series&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://github.com/go-resty/resty/releases/tag/v3.0.0-rc.4" rel="external" target="_blank"&gt;v3.0.0-rc.4&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;Sep 06, 2026&lt;/td&gt;
 &lt;td&gt;Third major release candidate 3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;v3.0.0&lt;/td&gt;
 &lt;td&gt;TBD&lt;/td&gt;
 &lt;td&gt;Third major release&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Currently v3 is in &lt;a href="https://github.com/go-resty/resty/releases/tag/v3.0.0-rc.4" rel="external" target="_blank"&gt;v3.0.0-rc.4&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Thanks to all the Resty users and &lt;a href="https://github.com/go-resty/resty/graphs/contributors" rel="external" target="_blank"&gt;contributors&lt;/a&gt;, appreciated.&lt;/p&gt;</description></item><item><title>Enable HTTP3</title><link>https://resty.dev/docs/example/enable-http3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/example/enable-http3/</guid><description>&lt;h1 id="enable-http3"&gt;Enable HTTP3&lt;a class="anchor" href="#enable-http3"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;HTTP3 is not yet included in the Go standard packages. However, the HTTP3 package is available from the community.&lt;/p&gt;
&lt;p&gt;Package: &lt;a href="https://github.com/quic-go/quic-go" rel="external" target="_blank"&gt;github.com/quic-go/quic-go&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Documentation: &lt;a href="https://quic-go.net/docs/" rel="external" target="_blank"&gt;https://quic-go.net/docs/&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="example"&gt;Example&lt;a class="anchor" href="#example"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// Refer to quic-go docs to customize configuration&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// https://quic-go.net/docs/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;http3Transport &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; &lt;span style="color:#ff6ac1"&gt;&amp;amp;&lt;/span&gt;http3.Transport{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; TLSClientConfig: &lt;span style="color:#ff6ac1"&gt;&amp;amp;&lt;/span&gt;tls.Config{}, &lt;span style="color:#78787e"&gt;// set a TLS client config, if desired&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; QUICConfig: &lt;span style="color:#ff6ac1"&gt;&amp;amp;&lt;/span&gt;quic.Config{ &lt;span style="color:#78787e"&gt;// QUIC connection options&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; MaxIdleTimeout: &lt;span style="color:#ff9f43"&gt;45&lt;/span&gt; &lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt; time.Second,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; KeepAlivePeriod: &lt;span style="color:#ff9f43"&gt;30&lt;/span&gt; &lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt; time.Second,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;defer&lt;/span&gt; http3Transport.&lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;New&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetTransport&lt;/span&gt;(http3Transport)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;defer&lt;/span&gt; c.&lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// You&amp;#39;re ready to use HTTP3 with Resty&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>How to do Dry-Run?</title><link>https://resty.dev/docs/example/how-to-do-dry-run/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/example/how-to-do-dry-run/</guid><description>&lt;h1 id="how-to-do-dry-run"&gt;How to do Dry-Run?&lt;a class="anchor" href="#how-to-do-dry-run"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The appropriate way to do Dry-Run implementation with Resty is to implement custom transport using the &lt;code&gt;http.RoundTripper&lt;/code&gt; interface.&lt;/p&gt;
&lt;p&gt;With custom transport, the user could perform any use case handling for Dry-Run.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff5c57"&gt;type&lt;/span&gt; DryRunTransport &lt;span style="color:#ff5c57"&gt;struct&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; http.RoundTripper
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff5c57"&gt;func&lt;/span&gt; (dr &lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;DryRunTransport) &lt;span style="color:#57c7ff"&gt;RoundTrip&lt;/span&gt;(r &lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;http.Request) (&lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;http.Response, &lt;span style="color:#9aedfe"&gt;error&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#78787e"&gt;// implement Dry-Run logic here ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff6ac1"&gt;return&lt;/span&gt; resp, err
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;New&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57c7ff"&gt;SetTransport&lt;/span&gt;(&lt;span style="color:#ff6ac1"&gt;&amp;amp;&lt;/span&gt;DryRunTransport{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#78787e"&gt;// initialize dry-run fields&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; })
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;defer&lt;/span&gt; c.&lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// start using the Resty client with dry-run ...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>OAuth2 Client Credentials</title><link>https://resty.dev/docs/example/oauth2-client-credentials/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/example/oauth2-client-credentials/</guid><description>&lt;h1 id="oauth2-client-credentials"&gt;OAuth2 Client Credentials&lt;a class="anchor" href="#oauth2-client-credentials"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://pkg.go.dev/golang.org/x/oauth2/clientcredentials" rel="external" target="_blank"&gt;&lt;img src="https://pkg.go.dev/badge/golang.org/x/oauth2/clientcredentials.svg" alt="Go Reference" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="without-modifying"&gt;Without Modifying&lt;a class="anchor" href="#without-modifying"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote class='book-hint note'&gt;
&lt;p&gt;As per the GoDoc of &lt;a href="https://pkg.go.dev/golang.org/x/oauth2/clientcredentials#Config.Client" rel="external" target="_blank"&gt;clientcredentials#Config.Client&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The returned &lt;code&gt;Client&lt;/code&gt; and its &lt;code&gt;Transport&lt;/code&gt; should not be modified.&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;clientCredCfg &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; &lt;span style="color:#ff6ac1"&gt;&amp;amp;&lt;/span&gt;clientcredentials.Config{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#78787e"&gt;/* initialize values ... */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// create a client&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;credClient &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; clientCredCfg.&lt;span style="color:#57c7ff"&gt;Client&lt;/span&gt;(context.&lt;span style="color:#57c7ff"&gt;Background&lt;/span&gt;())
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// create a Resty client&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;NewWithClient&lt;/span&gt;(credClient)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;defer&lt;/span&gt; c.&lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;// start using a resty client&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="modifying"&gt;Modifying&lt;a class="anchor" href="#modifying"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This scenario applies to any client and transport-related configurations, such as adding Root CA, Client Root CA, Client SSL certificates, transport timeouts, and so on.&lt;/p&gt;</description></item><item><title>SOCKS5 Proxy</title><link>https://resty.dev/docs/example/socks5-proxy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/example/socks5-proxy/</guid><description>&lt;h1 id="socks5-proxy"&gt;SOCKS5 Proxy&lt;a class="anchor" href="#socks5-proxy"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;package&lt;/span&gt; main
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;import&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#5af78e"&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#5af78e"&gt;&amp;#34;resty.dev/v3&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff5c57"&gt;func&lt;/span&gt; &lt;span style="color:#57c7ff"&gt;main&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	c &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; resty.&lt;span style="color:#57c7ff"&gt;New&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#57c7ff"&gt;SetProxy&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;socks5://127.0.0.1:1080&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ff6ac1"&gt;defer&lt;/span&gt; c.&lt;span style="color:#57c7ff"&gt;Close&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	res, err &lt;span style="color:#ff6ac1"&gt;:=&lt;/span&gt; c.&lt;span style="color:#57c7ff"&gt;R&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#57c7ff"&gt;Get&lt;/span&gt;(&lt;span style="color:#5af78e"&gt;&amp;#34;https://httpbin.org/get&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	fmt.&lt;span style="color:#57c7ff"&gt;Println&lt;/span&gt;(err, res)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>TLS Client Config on Custom http.RoundTripper</title><link>https://resty.dev/docs/example/tls-client-config-on-custom-roundtriper/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://resty.dev/docs/example/tls-client-config-on-custom-roundtriper/</guid><description>&lt;h1 id="tls-client-config-on-custom-httproundtripper"&gt;TLS Client Config on Custom http.RoundTripper&lt;a class="anchor" href="#tls-client-config-on-custom-httproundtripper"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Resty v3 provides the &lt;a href="https://pkg.go.dev/resty.dev/v3#TLSClientConfiger" rel="external" target="_blank"&gt;TLSClientConfiger&lt;/a&gt; interface to configure TLS client configuration for custom transports implemented using the &lt;a href="https://pkg.go.dev/net/http#RoundTripper" rel="external" target="_blank"&gt;http.RoundTripper&lt;/a&gt; interface.&lt;/p&gt;
&lt;h2 id="implement-tlsclientconfiger-interface"&gt;Implement &lt;code&gt;TLSClientConfiger&lt;/code&gt; interface&lt;a class="anchor" href="#implement-tlsclientconfiger-interface"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff5c57"&gt;type&lt;/span&gt; CustomTransport &lt;span style="color:#ff5c57"&gt;struct&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; http.RoundTripper
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; resty.TLSClientConfiger
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff5c57"&gt;func&lt;/span&gt; (t &lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;CustomTransport) &lt;span style="color:#57c7ff"&gt;RoundTrip&lt;/span&gt;(r &lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;http.Request) (&lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;http.Response, &lt;span style="color:#9aedfe"&gt;error&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#78787e"&gt;// custom round trip implementation here ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff6ac1"&gt;return&lt;/span&gt; resp, err
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff5c57"&gt;func&lt;/span&gt; (t &lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;CustomTransport) &lt;span style="color:#57c7ff"&gt;TLSClientConfig&lt;/span&gt;() &lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;tls.Config {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#78787e"&gt;// return TLS config instance&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff6ac1"&gt;return&lt;/span&gt; t.tlsConfig
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff5c57"&gt;func&lt;/span&gt; (t &lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;CustomTransport) &lt;span style="color:#57c7ff"&gt;SetTLSClientConfig&lt;/span&gt;(tlsConfig &lt;span style="color:#ff6ac1"&gt;*&lt;/span&gt;tls.Config) &lt;span style="color:#9aedfe"&gt;error&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#78787e"&gt;// handle TLS client config here&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff6ac1"&gt;return&lt;/span&gt; &lt;span style="color:#ff6ac1"&gt;nil&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="assign-it-to-the-resty-client"&gt;Assign it to the Resty client&lt;a class="anchor" href="#assign-it-to-the-resty-client"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Subsequently, construct a transport instance and assign it to the Resty client via the method &lt;a href="https://pkg.go.dev/resty.dev/v3#Client.SetTransport" rel="external" target="_blank"&gt;Client.SetTransport&lt;/a&gt;.&lt;/p&gt;</description></item></channel></rss>