Stream Body
Similar to the string / plain text body, the stream body allows you to send a stream or a file resource directly to the server. This is useful if the API accepts a plain-text style input but large files in the form of streams.
To get started, change your method to POST, PUT or PATCH depending on the requirements of the API. After that, you will need to add the HasBody
interface to your request. Without this interface, Saloon will not send any request body to the HTTP client.
Next, you will need to add the HasBody
trait to your request. This trait will implement the body()
method that the HasBody
interface requires. It also provides a method defaultBody()
which you can extend to provide a default body on your request.
Saloon won't add a Content-Type header for you for plain stream bodies so you must define the Content-Type or the API might not accept the data.
Default Body
There are a couple of ways to interact with the request body to prepare it to be sent. You can either use the methods mentioned below to add to the body on any given instance or you can use the defaultBody
method on your request. This is recommended because you could then define any requirements as constructor arguments in your request and then standardise your request even more.
Saloon can accept a PHP resource or a PSR StreamInterface
Stream implementation as the stream.
Interacting with the body() method
While you can define the default body on your request, it might be useful to add or modify the body at runtime on a per-request basis. Saloon has the following methods to allow you to modify the stream request body:
set(resource|StreamInterface $value) -> Set the stream
all(): StreamInterface -> Get the stream
isEmpty(): bool -> Check if the body is empty
isNotEmpty(): bool -> Check if the body is not empty
Connector Body
You can add the same interface and trait to your connector. If you have the trait on both the connector and the request, the body on the request will take priority. If you have the body on just the connector but not on the request, the request will inherit the body on the connector.
Last updated