我试图从flutter调用一个api,但我一直得到401未授权。根据api文档,它使用基本的身份验证,并且是UTF-8编码的。用户名和密码由文档提供,如果在web浏览器中尝试api并输入这些凭据,它就会通过并接收数据。这是我在flutter中使用的代码:
Future<void> requestData() async {
String username = 'abc';
String password = '123';
String basicAuth = 'Basic ' + base64Encode(utf8.encode('$username:$password'));
Response r = await get(
Uri.parse('http://api.example.com'),
headers: {
HttpHeaders.authorizationHeader: basicAuth,
});
print(r.body);
print(r.statusCode);
}
我也尝试过这种变体,它给出了相同的结果:
headers: <String, String>{
'authorization': basicAuth
}
鉴于用户名和密码是正确的,我打电话的方式肯定有问题,但我尝试了很多不同的方式,但都没有成功。如有任何帮助,我们将不胜感激!
根据我的经验,登录时不需要令牌或基本身份验证。而登录是post方法得不到的。
发现我读到的文档已经过时/不正确。api使用";摘要式认证";我查了一下就能够实现了。如果有人感兴趣,这就是代码:
import 'package:http/http.dart';
import 'package:http_auth/http_auth.dart';
...
Response res = await DigestAuthClient("USERNAME", "PASSWORD")
.get(Uri.parse("API_URL")).timeout(const Duration(seconds: 20));