Request body
Query parameters are typically only used on HTTP GET requests. For requests where you are sending data to the server, such as POST and PUT requests, you would send a request body that holds all of your extra information. Request bodies are placed after the HTTP headers in an HTTP request, with a one-line space between them. The following is a hypothetical POST request for logging into an imaginary website:
POST /login HTTP/1.1
Host: myprotectedsite.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 38
username=myuser&password=supersecretpw
In this request, we are sending our username and password to myprotectedsite.com/login. The headers for this request must describe the request body so the server is able to process it. In this case, we declare that the request body be in the x-www-form-urlencoded format, which is the same format used for the query parameters in the Query parameters section. We could use alternative formats, such as JSON or XML or even plain text, but only if it is supported by the server. The x-www-form-urlencoded format is the most widely supported and is generally a safe bet. The second parameter we define in the header is the length of the request body in bytes. This allows the server to efficiently prepare for processing the data, or rejecting the request completely if it is too large.
The Go standard library has good support for building HTTP requests quite simply—if you are familiar with the structure, at least. We will revisit how this is done later in this chapter.