[我正在使用Flutter构建应用,并且在尝试利用我们的api访问数据库数据时,出现错误400,表明请求中未设置标头。
我已经尝试了来自文档和其他人的问题的多种语法,但它似乎从未奏效。
测试片段:
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';
}
我尝试使用所有这些,结果始终是相同的,没有设置标头。
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"};
问题是,我想念什么吗?代码有什么问题吗?我认为这是一个后端问题,但我们似乎无法解决它,因此我只想确保它可以正常工作。
[我也试图找到其他可以测试的api,但是所有带有标头的api都是apitokens,您需要为其创建一个帐户...有关可以调试的API的任何建议?
仅将其放在此处,因为这个问题确实有答案。Richard Heap留下的评论使我得以解决此问题。归功于他,但我认为最好将其解决,这样以后遇到此问题的人就不必像我一样进行同样的搜索。
[我敢打赌,您的服务器(错误地)期望授权以大写字母开头。但是,Dart会小写。使用邮递员确认发送授权。如果是这样,请查看pub.dev/packages/alt_http
这确实解决了问题。我没有问题,键是“授权”而不是“授权”,但是值包含“承载”而不是“承载”。我用相同的方法验证了这一点:
现在进行的邮递员呼叫与您的flutter应用程序所做的完全相同->将不起作用。
进行邮递员小写呼叫->解决了问题。