Francesc Arolas
Francesc Arolas

Reputation: 355

How to put raw data in a http get request in Flutter(Dart)?

I'm trying to execute the following curl in dart but I can't find a way to achieve that:

curl --location --request GET 'https://someurl.com/query' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer xxxx' \
--data-raw '{
    "query":"test_value",
    "size":10
}'

The only way I've found to achieve this is to use POST and put the raw data inside the body but I was wondering if there is a real way to achieve that since the POST request with a body seems to be about 220ms slower than the GET one(I know that they should be almost equal, it may be something from the server when recieving the request).

Upvotes: 1

Views: 2406

Answers (2)

Peter Bk
Peter Bk

Reputation: 133

import 'package:http/http.dart' as http;

// Define the raw data to be sent in the request
String rawData = '{ "key": "value" }';

// Send the GET request with the raw data as the body
http.Response response = await http.get(
  'https://example.com/endpoint',
  headers: {'Content-Type': 'application/json'},
  body: rawData,
);

// Check the status code of the response to see if the request was successful
if (response.statusCode == 200) {
  // The request was successful, process the response
} else {
  // The request was not successful, handle the error
}

Upvotes: -1

Tim Klingeleers
Tim Klingeleers

Reputation: 3024

The default get() method of the http package doesn't allow you to add data since that isn't a common thing to do. You can get around this by using the Request object directly for more fine-grained control, as stated in the docs:

Request req = Request('GET', Uri.parse('https://someurl.com/query'))
  ..body = json.encode(data)
  ..headers.addAll({
    "Content-type": "application/json",
    "Authorization": "Bearer xxxx"
  });

var response await req.send();
if (response.statusCode == 200) {
    // do something with valid response
}

I'd look at getting the POST variant working properly, since a GET method semantically shouldn't do anything with the provided body. But that's a different discussion of course.

Upvotes: 1

Related Questions