HTTP.Request (http_fetch v0.9.0)
HTTP request configuration struct.
This module provides a structured way to build HTTP requests with proper conversion to the internal HTTP/1.1 wire format. It handles method normalization, header processing, body encoding, and FormData support.
Supported Methods
:get- GET requests (no body):head- HEAD requests (no body):post- POST requests (with body):put- PUT requests (with body):delete- DELETE requests (no body):patch- PATCH requests (with body)
Usage
# Basic request
request = %HTTP.Request{
method: :get,
url: URI.parse("https://api.example.com/data"),
headers: HTTP.Headers.new([{"Accept", "application/json"}])
}
# POST with JSON body
request = %HTTP.Request{
method: :post,
url: URI.parse("https://api.example.com/posts"),
headers: HTTP.Headers.new([{"Authorization", "Bearer token"}]),
content_type: "application/json",
body: JSON.encode!(%{title: "Hello"}),
http_options: [timeout: 10_000]
}
# FormData upload
form = HTTP.FormData.new()
|> HTTP.FormData.append_field("name", "John")
|> HTTP.FormData.append_file("photo", "photo.jpg", file_stream)
request = %HTTP.Request{
method: :post,
url: URI.parse("https://api.example.com/upload"),
body: form
}Default Headers
The library automatically adds a User-Agent header if not provided,
containing information about the runtime environment (OS, architecture,
OTP version, Elixir version, and library version).
Summary
Functions
Converts an HTTP.Request struct into legacy :httpc.request/4 arguments.
Converts an HTTP.Request struct into HTTP/1.1 wire iodata.
Types
@type body_content() :: String.t() | charlist() | HTTP.FormData.t() | nil
@type method() :: :head | :get | :post | :put | :delete | :patch
@type t() :: %HTTP.Request{ body: body_content(), content_type: content_type(), headers: HTTP.Headers.t(), http_options: Keyword.t(), method: method(), options: Keyword.t(), url: url() }
@type url() :: URI.t()
Functions
Converts an HTTP.Request struct into legacy :httpc.request/4 arguments.
This compatibility helper is preserved for callers that inspect or pass the
request shape directly, even though HTTP.fetch/2 no longer uses :httpc.
Converts an HTTP.Request struct into HTTP/1.1 wire iodata.