如何在Flutter(Dart)中将原始数据放入http get请求中?

zxlwwiss  于 2022-12-28  发布在  Flutter
关注(0)|答案(2)|浏览(152)

我尝试在dart中执行以下curl,但我找不到实现的方法:

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

我发现实现这一点的唯一方法是使用POST并将原始数据放入主体中,但我想知道是否有一种真实的的方法可以实现这一点,因为带主体的POST请求似乎比GET请求慢大约220ms(我知道它们应该几乎相等,可能是在接收请求时来自服务器的一些东西)。

flvlnr44

flvlnr441#

http包的默认get()方法不允许添加数据,因为这不是一个常见的操作。您可以直接使用Request对象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
}

我会考虑如何让POST变体正常工作,因为GET方法在语义上不应该对提供的主体做任何事情,但这当然是另一个讨论。

eqfvzcg8

eqfvzcg82#

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
}

相关问题