Headers can either be part of the client’s configuration, or passed to the specific requests.
require "httpx"
http = HTTPX.with(headers: { "accept" => "text/html" })
http.get("https://google.com") # sends request with "accept: text/html"
http.get("https://google.com", headers: { "accept-language" => "swahili" }) # sends the "accept-language: swahili" along with the previous "accept" header
httpx
supports settings trailers for “HTTP/2” requests and chunked “HTTP/1.1” requests.
Set them on the request directly:
http = HTTPX.with(headers: { "accept" => "text/html" })
request.build_request(:get, "https://www.example.com")
request.trailers["x-request-trace-id"] = TRACE_ID
http.request(request)
Or, in case in you need to act, p.ex. once the body is fully buffered:
http = HTTPX.with(headers: { "accept" => "text/html" })
request.build_request("GET", "https://www.example.com", headers: { "x-start-at" => Time.now.httpdate })
request.on(:trailers) do |req|
req["x-done-at"] = Time.now.httpdate
end
http.request(request)
Next: Response Handling