Headers 未在 http Flutter 上设置

Headers not being set on http Flutter

我正在使用 Flutter 构建应用程序,在尝试利用我们的 api 访问数据库数据时,我收到错误 400,指出请求中未设置 headers。

我已经尝试了来自文档和其他人的问题的多种语法,但它似乎从来没有奏效。

测试代码段:

Future<String> getList() async {

    String url = 'https://api.something/test';

    Map<String, String> headers = {"Authorization": "Bearer $test"};

    var res = await http.post(url, headers: headers);

    print('Response status: ${res.statusCode}');
    print('Response body: ${res.body}');

    return 'Finished';
  }

我试过使用所有这些,结果总是一样,没有设置 headers。

    Map<String, String> headers = {"Authorization": "Bearer $test"};

    var res = await http.post(url, headers: headers);
    var res = await http.post(url, headers: {"Authorization": "Bearer $test"});
    var res = await http.post(url, headers: {HttpHeaders.authorizationHeader: "Bearer $test"};

问题是,我是不是漏掉了什么?代码有什么问题吗?我认为这是一个 back-end 问题,但我们似乎无法修复它,所以我只是想确保这应该有效。

我也试图找到其他一些 api 来测试,但所有具有 headers 的都是 api 令牌,您需要为其创建帐户...对我可以调试的有什么建议吗?

只是把它放在这里,因为这个问题实际上有答案。 Richard Heap 留下的评论引导我解决了这个问题。感谢他,但我认为最好解决这个问题,这样以后遇到这个问题的人就不需要像我一样进行相同的搜索。

My bet is that your server is (incorrectly) expecting Authorization to begin with a capital. However, Dart will lower case it. Test sending authorization using, say, Postman to confirm. If so, look at pub.dev/packages/alt_http

这确实解决了这个问题。我对键 'Authorization' 而不是 'authorization' 没有问题,但值包含 'Bearer' 而不是 'bearer'。我用同样的方法验证了这一点:

邮递员呼叫与您的 Flutter 应用程序目前所做的完全相同 -> 将无法正常工作。

进行邮递员小写调用 -> 修复了问题。