github.com/System-Glitch/goyave/v2@v2.10.3-0.20200819142921-51011e75d504/docs/guide/basics/requests.html (about) 1 <!DOCTYPE html> 2 <html lang="en-US"> 3 <head> 4 <meta charset="utf-8"> 5 <meta name="viewport" content="width=device-width,initial-scale=1"> 6 <title>Requests | Goyave</title> 7 <meta name="generator" content="VuePress 1.5.3"> 8 <link rel="icon" type="image/png" sizes="16x16" href="/goyave/goyave_16.png"> 9 <link rel="icon" type="image/png" sizes="32x32" href="/goyave/goyave_32.png"> 10 <link rel="icon" type="image/png" sizes="64x64" href="/goyave/goyave_64.png"> 11 <link rel="icon" type="image/png" sizes="128x128" href="/goyave/goyave_128.png"> 12 <link rel="icon" type="image/png" sizes="256x256" href="/goyave/goyave_256.png"> 13 <link rel="icon" type="image/png" sizes="512x512" href="/goyave/goyave_512.png"> 14 <meta name="description" content="Goyave is a Golang web API framework aiming at cleanliness, fast development and power."> 15 <meta name="og:title" content="Requests - Goyave"> 16 <meta name="twitter:title" content="Requests - Goyave"> 17 <meta name="title" content="Requests - Goyave"> 18 <meta property="twitter:description" content="Goyave is a Golang web API framework aiming at cleanliness, fast development and power."> 19 <meta property="twitter:image:src" content="https://system-glitch.github.io/goyave/goyave_banner.png"> 20 <meta property="twitter:card" content="summary_large_image"> 21 <meta property="og:type" content="website"> 22 <meta property="og:description" content="Goyave is a Golang web API framework aiming at cleanliness, fast development and power."> 23 <meta property="og:image" content="https://system-glitch.github.io/goyave/goyave_banner.png"> 24 <meta property="og:site_name" content="Goyave"> 25 <link rel="preload" href="/goyave/assets/css/0.styles.589fd562.css" as="style"><link rel="preload" href="/goyave/assets/js/app.092490a7.js" as="script"><link rel="preload" href="/goyave/assets/js/4.75a9cc68.js" as="script"><link rel="preload" href="/goyave/assets/js/1.121dd9ed.js" as="script"><link rel="preload" href="/goyave/assets/js/20.3a300ca3.js" as="script"><link rel="preload" href="/goyave/assets/js/5.c83f1192.js" as="script"><link rel="prefetch" href="/goyave/assets/js/10.2f07bbf5.js"><link rel="prefetch" href="/goyave/assets/js/11.2d66fdef.js"><link rel="prefetch" href="/goyave/assets/js/12.63171b15.js"><link rel="prefetch" href="/goyave/assets/js/13.770050f3.js"><link rel="prefetch" href="/goyave/assets/js/14.b933d8cf.js"><link rel="prefetch" href="/goyave/assets/js/15.36df2a66.js"><link rel="prefetch" href="/goyave/assets/js/16.ed66719e.js"><link rel="prefetch" href="/goyave/assets/js/17.7bef5f05.js"><link rel="prefetch" href="/goyave/assets/js/18.470b55ed.js"><link rel="prefetch" href="/goyave/assets/js/19.90e0dab8.js"><link rel="prefetch" href="/goyave/assets/js/21.c3fd6053.js"><link rel="prefetch" href="/goyave/assets/js/22.d5569617.js"><link rel="prefetch" href="/goyave/assets/js/23.931b2034.js"><link rel="prefetch" href="/goyave/assets/js/24.1a4755e7.js"><link rel="prefetch" href="/goyave/assets/js/25.0d463913.js"><link rel="prefetch" href="/goyave/assets/js/26.3c173a7a.js"><link rel="prefetch" href="/goyave/assets/js/27.9c5b36f2.js"><link rel="prefetch" href="/goyave/assets/js/28.41e055b7.js"><link rel="prefetch" href="/goyave/assets/js/29.b87adf4a.js"><link rel="prefetch" href="/goyave/assets/js/3.ef71e77d.js"><link rel="prefetch" href="/goyave/assets/js/6.2336bf0c.js"><link rel="prefetch" href="/goyave/assets/js/7.d60e55c1.js"><link rel="prefetch" href="/goyave/assets/js/8.2ee33a42.js"><link rel="prefetch" href="/goyave/assets/js/9.8e043d60.js"> 26 <link rel="stylesheet" href="/goyave/assets/css/0.styles.589fd562.css"> 27 </head> 28 <body> 29 <div id="app" data-server-rendered="true"><div class="theme-container"><header class="navbar"><div class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/goyave/" class="home-link router-link-active"><img src="/goyave/goyave_64.png" alt="Goyave" class="logo"> <span class="site-name can-hide">Goyave</span></a> <div class="links"><div class="user-settings"><a title="Dark theme" href="#" class="settings-button"><svg aria-hidden="true" data-prefix="fas" data-icon="cog" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="svg-inline--fa fa-cog fa-w-16 settings-icon"><path fill="currentColor" d="M8 0c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zM8 15c-3.9 0-7-3.1-7-7 0-2.4 1.2-4.6 3.2-5.9-0.1 0.6-0.2 1.3-0.2 1.9 0 4.9 4 8.9 8.9 9-1.3 1.3-3 2-4.9 2z"></path></svg></a></div> <div class="search-box"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <nav class="nav-links can-hide"><div class="nav-item"><a href="/goyave/guide/" class="nav-link router-link-active"> 30 Guide 31 </a></div><div class="nav-item"><a href="https://pkg.go.dev/github.com/System-Glitch/goyave/v2" target="_blank" rel="noopener noreferrer" class="nav-link external"> 32 pkg.go.dev 33 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></div> <a href="https://github.com/System-Glitch/goyave" target="_blank" rel="noopener noreferrer" class="repo-link"> 34 GitHub 35 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></nav></div></header> <div class="sidebar-mask"></div> <aside class="sidebar"><nav class="nav-links"><div class="nav-item"><a href="/goyave/guide/" class="nav-link router-link-active"> 36 Guide 37 </a></div><div class="nav-item"><a href="https://pkg.go.dev/github.com/System-Glitch/goyave/v2" target="_blank" rel="noopener noreferrer" class="nav-link external"> 38 pkg.go.dev 39 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></div> <a href="https://github.com/System-Glitch/goyave" target="_blank" rel="noopener noreferrer" class="repo-link"> 40 GitHub 41 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></nav> <ul class="sidebar-links"><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>Guide</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading open"><span>The Basics</span> <span class="arrow down"></span></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/goyave/guide/basics/routing.html" class="sidebar-link">Routing</a></li><li><a href="/goyave/guide/basics/middleware.html" class="sidebar-link">Middleware</a></li><li><a href="/goyave/guide/basics/requests.html" aria-current="page" class="active sidebar-link">Requests</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/goyave/guide/basics/requests.html#introduction" class="sidebar-link">Introduction</a></li><li class="sidebar-sub-header"><a href="/goyave/guide/basics/requests.html#methods" class="sidebar-link">Methods</a></li><li class="sidebar-sub-header"><a href="/goyave/guide/basics/requests.html#attributes" class="sidebar-link">Attributes</a></li></ul></li><li><a href="/goyave/guide/basics/controllers.html" class="sidebar-link">Controllers</a></li><li><a href="/goyave/guide/basics/responses.html" class="sidebar-link">Responses</a></li><li><a href="/goyave/guide/basics/database.html" class="sidebar-link">Database</a></li><li><a href="/goyave/guide/basics/validation.html" class="sidebar-link">Validation</a></li></ul></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>Advanced</span> <span class="arrow right"></span></p> <!----></section></li></ul> </aside> <main class="page"> <div class="theme-default-content content__default"><h1 id="requests"><a href="#requests" class="header-anchor">#</a> Requests</h1> <p></p><div class="table-of-contents"><ul><li><a href="#introduction">Introduction</a></li><li><a href="#methods">Methods</a><ul><li><a href="#accessors">Accessors</a></li></ul></li><li><a href="#attributes">Attributes</a></li></ul></div><p></p> <h2 id="introduction"><a href="#introduction" class="header-anchor">#</a> Introduction</h2> <p>Handlers receive a <code>goyave.Response</code> and a <code>goyave.Request</code> as parameters. This section is a technical reference of the <code>Request</code> object. This object can give you a lot of information about the incoming request, such as its headers, cookies, or body.</p> <p>All functions below require the <code>goyave</code> package to be imported.</p> <div class="language-go extra-class"><pre class="language-go"><code><span class="token keyword">import</span> <span class="token string">"github.com/System-Glitch/goyave/v2"</span> 42 </code></pre></div><h2 id="methods"><a href="#methods" class="header-anchor">#</a> Methods</h2> <div class="table"><p><a href="#request-request">Request</a> <a href="#request-method">Method</a> <a href="#request-protocol">Protocol</a> <a href="#request-uri">URI</a> <a href="#request-header">Header</a> <a href="#request-contentlength">ContentLength</a> <a href="#request-remoteaddress">RemoteAddress</a> <a href="#request-cookies">Cookies</a> <a href="#request-referrer">Referrer</a> <a href="#request-useragent">UserAgent</a> <a href="#request-basicauth">BasicAuth</a> <a href="#request-bearertoken">BearerToken</a> <a href="#request-corsoptions">CORSOptions</a></p></div><h4 id="request-request"><a href="#request-request" class="header-anchor">#</a> Request.Request</h4> <p>Return the raw http request. Prefer using the "goyave.Request" accessors.</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td></td> <td><code>*http.Request</code></td></tr></tbody></table> <h4 id="request-method"><a href="#request-method" class="header-anchor">#</a> Request.Method</h4> <p>The HTTP method (GET, POST, PUT, etc.).</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td></td> <td><code>string</code></td></tr></tbody></table> <p><strong>Example:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>request<span class="token punctuation">.</span><span class="token function">Method</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// GET</span> 43 </code></pre></div><h4 id="request-protocol"><a href="#request-protocol" class="header-anchor">#</a> Request.Protocol</h4> <p>The protocol used by this request, "HTTP/1.1" for example.</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td></td> <td><code>string</code></td></tr></tbody></table> <p><strong>Example:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>request<span class="token punctuation">.</span><span class="token function">Protocol</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// "HTTP/1.1"</span> 44 </code></pre></div><h4 id="request-uri"><a href="#request-uri" class="header-anchor">#</a> Request.URI</h4> <p>URI specifies the URI being requested. Use this if you absolutely need the raw query params, url, etc. Otherwise use the provided methods and fields of the <code>goyave.Request</code>.</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td></td> <td><code>*url.URL</code></td></tr></tbody></table> <p><strong>Example:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>request<span class="token punctuation">.</span><span class="token function">URI</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>Path<span class="token punctuation">)</span> <span class="token comment">// "/foo/bar"</span> 45 </code></pre></div><h4 id="request-header"><a href="#request-header" class="header-anchor">#</a> Request.Header</h4> <p>Header contains the request header fields either received by the server or to be sent by the client. Header names are case-insensitive.</p> <p>If the raw request has the following header lines,</p> <div class="language- extra-class"><pre class="language-text"><code>Host: example.com 46 accept-encoding: gzip, deflate 47 Accept-Language: en-us 48 fOO: Bar 49 foo: two 50 </code></pre></div><p>then the header map will look like this:</p> <div class="language-go extra-class"><pre class="language-go"><code>Header <span class="token operator">=</span> <span class="token keyword">map</span><span class="token punctuation">[</span><span class="token builtin">string</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">string</span><span class="token punctuation">{</span> 51 <span class="token string">"Accept-Encoding"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span><span class="token string">"gzip, deflate"</span><span class="token punctuation">}</span><span class="token punctuation">,</span> 52 <span class="token string">"Accept-Language"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span><span class="token string">"en-us"</span><span class="token punctuation">}</span><span class="token punctuation">,</span> 53 <span class="token string">"Foo"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span><span class="token string">"Bar"</span><span class="token punctuation">,</span> <span class="token string">"two"</span><span class="token punctuation">}</span><span class="token punctuation">,</span> 54 <span class="token punctuation">}</span> 55 </code></pre></div><table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td></td> <td><code>http.Header</code></td></tr></tbody></table> <p><strong>Example:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>request<span class="token punctuation">.</span><span class="token function">Header</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">Get</span><span class="token punctuation">(</span><span class="token string">"Content-Type"</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// "application/json"</span> 56 </code></pre></div><h4 id="request-contentlength"><a href="#request-contentlength" class="header-anchor">#</a> Request.ContentLength</h4> <p>ContentLength records the length (in bytes) of the associated content. The value -1 indicates that the length is unknown.</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td></td> <td><code>int64</code></td></tr></tbody></table> <p><strong>Example:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>request<span class="token punctuation">.</span><span class="token function">ContentLength</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// 758</span> 57 </code></pre></div><h4 id="request-remoteaddress"><a href="#request-remoteaddress" class="header-anchor">#</a> Request.RemoteAddress</h4> <p>RemoteAddress allows to record the network address that sent the request, usually for logging.</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td></td> <td><code>string</code></td></tr></tbody></table> <p><strong>Example:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>request<span class="token punctuation">.</span><span class="token function">RemoteAddress</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// 192.168.0.10:1234</span> 58 </code></pre></div><h4 id="request-cookies"><a href="#request-cookies" class="header-anchor">#</a> Request.Cookies</h4> <p>Cookies returns the HTTP cookies sent with the request.</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td><code>name string</code></td> <td><code>[]*http.Cookie</code></td></tr></tbody></table> <p><strong>Example:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>cookie <span class="token operator">:=</span> request<span class="token punctuation">.</span><span class="token function">Cookies</span><span class="token punctuation">(</span><span class="token string">"cookie-name"</span><span class="token punctuation">)</span> 59 fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>cookie<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">.</span>value<span class="token punctuation">)</span> 60 </code></pre></div><div class="custom-block warning"><p class="custom-block-title">WARNING</p> <p>Protect yourself from <a href="https://en.wikipedia.org/wiki/Cross-site_request_forgery" target="_blank" rel="noopener noreferrer">CSRF attacks<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a> when using cookies!</p></div> <h4 id="request-referrer"><a href="#request-referrer" class="header-anchor">#</a> Request.Referrer</h4> <p>Referrer returns the referring URL, if sent in the request.</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td></td> <td><code>string</code></td></tr></tbody></table> <p><strong>Example:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>request<span class="token punctuation">.</span><span class="token function">Referrer</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// "https://github.com/System-Glitch/goyave/"</span> 61 </code></pre></div><h4 id="request-useragent"><a href="#request-useragent" class="header-anchor">#</a> Request.UserAgent</h4> <p>UserAgent returns the client's User-Agent, if sent in the request.</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td></td> <td><code>string</code></td></tr></tbody></table> <p><strong>Example:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>request<span class="token punctuation">.</span><span class="token function">UserAgent</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// "Mozilla/5.0 ..."</span> 62 </code></pre></div><h4 id="request-corsoptions"><a href="#request-corsoptions" class="header-anchor">#</a> Request.CORSOptions</h4> <p><span class="badge tip" style="vertical-align:top;" data-v-15b7b770>Since v2.3.0</span></p> <p>Returns the CORS options applied to this request, or <code>nil</code>. Learn more about CORS <a href="/goyave/guide/advanced/cors.html">here</a>.</p> <p>The returned object is a copy of the options applied to the router. Therefore, altering the returned object will not alter the router's options.</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td></td> <td><code>string</code></td></tr></tbody></table> <p><strong>Example:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>request<span class="token punctuation">.</span><span class="token function">CORSOptions</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>AllowedMethods<span class="token punctuation">)</span> <span class="token comment">// "[HEAD GET POST PUT PATCH DELETE]"</span> 63 </code></pre></div><h4 id="request-basicauth"><a href="#request-basicauth" class="header-anchor">#</a> Request.BasicAuth</h4> <p>Returns the username and password provided in the request's <code>Authorization</code> header, if the request uses HTTP Basic Authentication.</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td></td> <td><code>username string</code></td></tr> <tr><td></td> <td><code>password string</code></td></tr> <tr><td></td> <td><code>ok bool</code></td></tr></tbody></table> <p><strong>Example:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>username<span class="token punctuation">,</span> password<span class="token punctuation">,</span> ok <span class="token operator">:=</span> request<span class="token punctuation">.</span><span class="token function">BasicAuth</span><span class="token punctuation">(</span><span class="token punctuation">)</span> 64 fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>username<span class="token punctuation">)</span> <span class="token comment">// "admin"</span> 65 fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>password<span class="token punctuation">)</span> <span class="token comment">// "secret"</span> 66 fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>ok<span class="token punctuation">)</span> <span class="token comment">// true</span> 67 </code></pre></div><h4 id="request-bearertoken"><a href="#request-bearertoken" class="header-anchor">#</a> Request.BearerToken</h4> <p><span class="badge tip" style="vertical-align:top;" data-v-15b7b770>Since v2.5.0</span></p> <p>Extract the auth token from the "Authorization" header. Only takes tokens of type "Bearer".</p> <p>Returns empty string if no token found or the header is invalid.</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td></td> <td><code>token string</code></td></tr> <tr><td></td> <td><code>ok bool</code></td></tr></tbody></table> <p><strong>Example:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>token<span class="token punctuation">,</span> ok <span class="token operator">:=</span> request<span class="token punctuation">.</span><span class="token function">BearerToken</span><span class="token punctuation">(</span><span class="token punctuation">)</span> 68 fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>token<span class="token punctuation">)</span> <span class="token comment">// "ey..."</span> 69 fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>ok<span class="token punctuation">)</span> <span class="token comment">// true</span> 70 </code></pre></div><h3 id="accessors"><a href="#accessors" class="header-anchor">#</a> Accessors</h3> <p><span class="badge tip" style="vertical-align:top;" data-v-15b7b770>Since v2.0.0</span></p> <p>Accessors are helper functions to retrieve request data without having to write the type assertion. This is helpful to make your controllers cleaner. You shouldn't use these accessors in middleware because they assume the data has been converted by the validation already. Data can still be accessed through the <code>Data</code> attribute. There is currently no accessor for slices.</p> <div class="table"><p><a href="#request-has">Has</a> <a href="#request-string">String</a> <a href="#request-numeric">Numeric</a> <a href="#request-integer">Integer</a> <a href="#request-bool">Bool</a> <a href="#request-file">File</a> <a href="#request-timezone">Timezone</a> <a href="#request-ip">IP</a> <a href="#request-url">URL</a> <a href="#request-uuid">UUID</a> <a href="#request-date">Date</a></p></div><h4 id="request-has"><a href="#request-has" class="header-anchor">#</a> Request.Has</h4> <p>Check if the given field exists in the request data.</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td><code>field string</code></td> <td><code>bool</code></td></tr></tbody></table> <p><strong>Example:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>request<span class="token punctuation">.</span><span class="token function">Has</span><span class="token punctuation">(</span><span class="token string">"name"</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// true</span> 71 </code></pre></div><h4 id="request-string"><a href="#request-string" class="header-anchor">#</a> Request.String</h4> <p>Get a string field from the request data. Panics if the field is not a string or doesn't exist.</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td><code>field string</code></td> <td><code>string</code></td></tr></tbody></table> <p><strong>Example:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>request<span class="token punctuation">.</span><span class="token function">String</span><span class="token punctuation">(</span><span class="token string">"name"</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// "JohnDoe"</span> 72 </code></pre></div><h4 id="request-numeric"><a href="#request-numeric" class="header-anchor">#</a> Request.Numeric</h4> <p>Get a numeric field from the request data. Panics if the field is not numeric or doesn't exist.</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td><code>field string</code></td> <td><code>float64</code></td></tr></tbody></table> <p><strong>Example:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>request<span class="token punctuation">.</span><span class="token function">Numeric</span><span class="token punctuation">(</span><span class="token string">"price"</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// 42.3</span> 73 </code></pre></div><h4 id="request-integer"><a href="#request-integer" class="header-anchor">#</a> Request.Integer</h4> <p>Get an integer field from the request data. Panics if the field is not an integer or doesn't exist.</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td><code>field string</code></td> <td><code>int</code></td></tr></tbody></table> <p><strong>Example:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>request<span class="token punctuation">.</span><span class="token function">Integer</span><span class="token punctuation">(</span><span class="token string">"age"</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// 32</span> 74 </code></pre></div><h4 id="request-bool"><a href="#request-bool" class="header-anchor">#</a> Request.Bool</h4> <p>Get a bool field from the request data. Panics if the field is not a bool or doesn't exist.</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td><code>field string</code></td> <td><code>bool</code></td></tr></tbody></table> <p><strong>Example:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>request<span class="token punctuation">.</span><span class="token function">Bool</span><span class="token punctuation">(</span><span class="token string">"EULA"</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// true</span> 75 </code></pre></div><h4 id="request-file"><a href="#request-file" class="header-anchor">#</a> Request.File</h4> <p>Get a file field from the request data. Panics if the field is not a file or doesn't exist.</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td><code>field string</code></td> <td><code>[]filesystem.File</code></td></tr></tbody></table> <p><strong>Example:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code><span class="token keyword">for</span> <span class="token boolean">_</span><span class="token punctuation">,</span> f <span class="token operator">:=</span> <span class="token keyword">range</span> request<span class="token punctuation">.</span><span class="token function">File</span><span class="token punctuation">(</span><span class="token string">"images"</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> 76 fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>f<span class="token punctuation">.</span>Header<span class="token punctuation">.</span>Filename<span class="token punctuation">)</span> 77 <span class="token punctuation">}</span> 78 </code></pre></div><h4 id="request-timezone"><a href="#request-timezone" class="header-anchor">#</a> Request.Timezone</h4> <p>Get a timezone field from the request data. Panics if the field is not a timezone or doesn't exist.</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td><code>field string</code></td> <td><code>*time.Location</code></td></tr></tbody></table> <p><strong>Example:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>request<span class="token punctuation">.</span><span class="token function">Timezone</span><span class="token punctuation">(</span><span class="token string">"tz"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">String</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// "America/New_York"</span> 79 </code></pre></div><h4 id="request-ip"><a href="#request-ip" class="header-anchor">#</a> Request.IP</h4> <p>Get an IP field from the request data. Panics if the field is not an IP or doesn't exist.</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td><code>field string</code></td> <td><code>net.IP</code></td></tr></tbody></table> <p><strong>Example:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>request<span class="token punctuation">.</span><span class="token function">IP</span><span class="token punctuation">(</span><span class="token string">"host"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">String</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// "127.0.0.1"</span> 80 </code></pre></div><h4 id="request-url"><a href="#request-url" class="header-anchor">#</a> Request.URL</h4> <p>Get a URL field from the request data. Panics if the field is not a URL or doesn't exist.</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td><code>field string</code></td> <td><code>*url.URL</code></td></tr></tbody></table> <p><strong>Example:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>request<span class="token punctuation">.</span><span class="token function">URL</span><span class="token punctuation">(</span><span class="token string">"link"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">String</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// "https://google.com"</span> 81 </code></pre></div><h4 id="request-uuid"><a href="#request-uuid" class="header-anchor">#</a> Request.UUID</h4> <p>Get a UUID field from the request data. Panics if the field is not a UUID or doesn't exist.</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td><code>field string</code></td> <td><code>uuid.UUID</code></td></tr></tbody></table> <p><strong>Example:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>request<span class="token punctuation">.</span><span class="token function">UUID</span><span class="token punctuation">(</span><span class="token string">"id"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">String</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// "3bbcee75-cecc-5b56-8031-b6641c1ed1f1"</span> 82 </code></pre></div><h4 id="request-date"><a href="#request-date" class="header-anchor">#</a> Request.Date</h4> <p>Get a date field from the request data. Panics if the field is not a date or doesn't exist.</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td><code>field string</code></td> <td><code>time.Time</code></td></tr></tbody></table> <p><strong>Example:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>request<span class="token punctuation">.</span><span class="token function">Date</span><span class="token punctuation">(</span><span class="token string">"birthdate"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">String</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// "2019-11-21 00:00:00 +0000 UTC"</span> 83 </code></pre></div><h2 id="attributes"><a href="#attributes" class="header-anchor">#</a> Attributes</h2> <div class="table"><p><a href="#request-rules">Rules</a> <a href="#request-data">Data</a> <a href="#request-params">Params</a> <a href="#request-lang">Lang</a></p></div><h4 id="request-rules"><a href="#request-rules" class="header-anchor">#</a> Request.Rules</h4> <p>The validation rule set associated with this request. See the <a href="/goyave/guide/basics/validation.html">validation</a> section for more information.</p> <h4 id="request-data"><a href="#request-data" class="header-anchor">#</a> Request.Data</h4> <p>A <code>map[string]interface{}</code> containing the request's data. The key is the name of the field. This map contains the data from the request's body <strong>and</strong> the URL query string values. The request's body parameters takes precedence over the URL query string values.</p> <p>For the given JSON request:</p> <div class="language-json extra-class"><pre class="language-json"><code><span class="token punctuation">{</span> 84 <span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"John Doe"</span><span class="token punctuation">,</span> 85 <span class="token property">"tags"</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token string">"tag1"</span><span class="token punctuation">,</span> <span class="token string">"tag2"</span><span class="token punctuation">]</span> 86 <span class="token punctuation">}</span> 87 </code></pre></div><div class="language-go extra-class"><pre class="language-go"><code>fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>request<span class="token punctuation">.</span>Data<span class="token punctuation">[</span><span class="token string">"name"</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment">// "John Doe"</span> 88 fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>request<span class="token punctuation">.</span>Data<span class="token punctuation">[</span><span class="token string">"tags"</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment">// "[tag1 tag2]" ([]string)</span> 89 </code></pre></div><p>You would obtain the same result for the following url-encoded request:</p> <div class="language- extra-class"><pre class="language-text"><code>name=John%20Doe&tags=tag1&tags=tag2 90 </code></pre></div><p>Because the <code>Data</code> attribute can hold any type of data, you will likely need type assertion. If you validated your request, checking for type assertion errors is not necessary.</p> <div class="language-go extra-class"><pre class="language-go"><code>tags<span class="token punctuation">,</span> <span class="token boolean">_</span> <span class="token operator">:=</span> request<span class="token punctuation">.</span>Data<span class="token punctuation">[</span><span class="token string">"tags"</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">string</span><span class="token punctuation">)</span> 91 </code></pre></div><h4 id="request-params"><a href="#request-params" class="header-anchor">#</a> Request.Params</h4> <p><code>Params</code> is a <code>map[string]string</code> of the route parameters.</p> <p>For the given route definition and request:</p> <div class="language- extra-class"><pre class="language-text"><code>/categories/{category}/{product_id} 92 </code></pre></div><div class="language- extra-class"><pre class="language-text"><code>/categories/3/5 93 </code></pre></div><div class="language-go extra-class"><pre class="language-go"><code>fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>request<span class="token punctuation">.</span>Params<span class="token punctuation">[</span><span class="token string">"category"</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment">// "3"</span> 94 fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>request<span class="token punctuation">.</span>Params<span class="token punctuation">[</span><span class="token string">"product_id"</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment">// "5"</span> 95 </code></pre></div><h4 id="request-lang"><a href="#request-lang" class="header-anchor">#</a> Request.Lang</h4> <p><code>Lang</code> indicates the language desired by the user. This attribute is automatically set by a core middleware, based on the <code>Accept-Language</code> header, if present. If the desired language is not available, the default language is used.</p> <p>Learn more in the <a href="/goyave/guide/advanced/localization.html">localization</a> section.</p> <div class="language-go extra-class"><pre class="language-go"><code>fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>request<span class="token punctuation">.</span>Lang<span class="token punctuation">)</span> <span class="token comment">// "en-US"</span> 96 fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>lang<span class="token punctuation">.</span><span class="token function">Get</span><span class="token punctuation">(</span>request<span class="token punctuation">.</span>Lang<span class="token punctuation">,</span> <span class="token string">"validation.rules.required"</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// "The :field is required."</span> 97 </code></pre></div><h4 id="request-user"><a href="#request-user" class="header-anchor">#</a> Request.User</h4> <p><span class="badge tip" style="vertical-align:top;" data-v-15b7b770>Since v2.5.0</span></p> <p><code>User</code> is an <code>interface{}</code> containing the authenticated user if the route is protected, <code>nil</code> otherwise.</p> <p>Learn more in the <a href="/goyave/guide/advanced/authentication.html">authentication</a> section.</p> <p><strong>Example:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>request<span class="token punctuation">.</span>User<span class="token punctuation">.</span><span class="token punctuation">(</span><span class="token operator">*</span>model<span class="token punctuation">.</span>User<span class="token punctuation">)</span><span class="token punctuation">.</span>Name<span class="token punctuation">)</span> <span class="token comment">// "John Doe"</span> 98 </code></pre></div></div> <footer class="page-edit"><div class="edit-link"><a href="https://github.com/System-Glitch/goyave/edit/master/docs_src/src/guide/basics/requests.md" target="_blank" rel="noopener noreferrer">Edit this page on GitHub</a> <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></div> <!----></footer> <div class="page-nav"><p class="inner"><span class="prev"> 99 ← 100 <a href="/goyave/guide/basics/middleware.html" class="prev"> 101 Middleware 102 </a></span> <span class="next"><a href="/goyave/guide/basics/controllers.html"> 103 Controllers 104 </a> 105 → 106 </span></p></div> </main></div><div class="global-ui"><!----></div></div> 107 <script src="/goyave/assets/js/app.092490a7.js" defer></script><script src="/goyave/assets/js/4.75a9cc68.js" defer></script><script src="/goyave/assets/js/1.121dd9ed.js" defer></script><script src="/goyave/assets/js/20.3a300ca3.js" defer></script><script src="/goyave/assets/js/5.c83f1192.js" defer></script> 108 </body> 109 </html>