Dart:使用Header进行HTTP GET请求

11

我正在开发一个与 LIFX 配合使用的 Flutter 应用程序。我试图按照他们的说明(此处)进行操作,但是在向 HTTP GET 请求添加标题时遇到了问题。

TestHttpGet() async {
  var httpClient = new HttpClient();
  var header = "Bearer $token"; //token hidden
  var url = 'https://api.lifx.com/v1/lights/all/state';

  String result;
  try {
    var request = await httpClient.getUrl(Uri.parse(url));
    request.headers.set("Authorization", header);
    var response = await request.close();
    if (response.statusCode == HttpStatus.OK) {
          var json = await response.transform(UTF8.decoder).join();
          print(json);
          var data = JSON.decode(json);
          result = data['brightness'].toString();
        } else {
          result =
              'Error getting response:\nHttp status ${response.statusCode}';
        }
      } catch (exception) {
        result = 'Failed parsing response';
      }

出现 Error getting response: Http status 404 错误。我已尝试使用各种方式 request.headers .set .add [HttpHeaders.Authorization] = "header",但仍然返回404错误。欢迎提供任何建议。


我认为authorization头应该是小写的,而且设置或添加都可以。否则,你可能会遇到API密钥的问题。 - Jonah Williams
使用 cURL Authorization 可以正常工作,但我尝试在 Flutter 中使用 authorization 却不起作用。 - Altkey
这将起作用 -> http.get(url, headers:{"Authorization":"value"}).then(.....) - Daksh Gargas
3个回答

10

您可以将Map<String,String>作为headers参数传递给http.get调用,如下所示:

await httpClient.get(url, headers: {
  'Authorization': 'Bearer $token',
});

同时将其转换为小写。我也遇到了同样的问题。输入“Authorization”会导致小写的“authorization”被写入。顺便说一下,您可以使用网址:http://postman-echo.com/headers来获取所有标头,因为服务器将其视为JSON响应。 - Martin Kersten

1

为了设置标题,您不能设置整个变量,因为它被设置为final。您需要设置单个数组项的值,这些项在此情况下也称为单个“标题”。

例如:

http.Request request = http.Request('GET', uri);
request.headers['Authorization'] = 'Bearer $token';

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接