Keep HttpRequest stream open while I issue a Client.post

Issue

My dart server has a function which receives a POST request from a client. I want to use information from that request to issue a POST to another server, then use the response from this other server to send a response back to the original client request. When I issue my POST to the other server, it closes the stream on the inbound client request and I can no longer respond. Is there a way to keep the request stream ‘alive’ while I do a POST? Or, is there another way to do this? I did try to issue the POST on a different Isolate, but that didn’t help, the http request stream is still getting closed.

void postRequest(HttpRequest request) async {
final endPoint = 'https://www.anotherserver.com/information';
final client = Client();

final data = request.headers.value('data'); // Get data from client
final response = client.post(endPoint, body: data); // Send data to other server

// Do stuff with the response from endPoint server

// For simplicity of this example, just send back the response body back to the client
// This write call to the request causes an "Stream Sink Closed" exception
// It appears the POST call to the endPoint server, caused the client request stream
// to get closed.
request.response.write(response.body);
await request.response.flush();
await request.response.close();

}

Solution

I was not awaiting the client.post…. I need to do a better job of watching out for that.

Answered By – Martin Fink

Answer Checked By – Mildred Charles (FlutterFixes Admin)

Leave a Reply

Your email address will not be published. Required fields are marked *