Receiving responses
All functions used to make an HTTP request (request
, get
, post
, etc.) allow you to receive a response as an HttpResponse object. HttpResponse
exposes API required to get a response body in various ways (raw bytes, JSON objects, etc.) and obtain response parameters, such as a status code, content type, headers, and so on. For example, you can receive HttpResponse
for a GET
request without parameters as follows:
Receive response body
Raw body
To receive a raw body as String, call the HttpResponse.receive function in the following way:
Similarly, you can get a body as ByteArray:
A runnable example below shows how to get a response as a byte array and save it to a file:
JSON object
With the JSON plugin installed, you can deserialize JSON data into a data class when receiving responses, for example:
To learn more, see JSON plugin.
Streaming data
When you call the HttpResponse.receive
function to get a body, Ktor processes a response in memory and returns a full response body. If you need to get chunks of a response sequentially instead of waiting for the entire response, use HttpStatement
with scoped execute block. A runnable example below shows how to receive a response content in chunks (byte packets) and save them in a file:
In this example, ByteReadChannel is used to read data asynchronously using byte packets (ByteReadPacket) and append the content of these packets to the content of a file.
Receive response parameters
The HttpResponse class allows you to get various response parameters, such as a status code, headers, HTTP version, and so on.
Status code
To get a status code of a response, use the HttpResponse.status property, for example:
Headers
The HttpResponse.headers property allows you to get a Headers map containing all response headers. HttpResponse
also exposes a bunch of specific functions for receiving specific header values, for example:
contentType for the
Content-Type
header valuecharset for a charset from the
Content-Type
header value.etag for the
E-Tag
header value.setCookie for the
Set-Cookie
header value.