flutter - Flutter http_auth headers 包含“carrier return”和“new line”字符(\r\n)
问题描述
我目前正在尝试使用颤振并尝试使用 http 包。当我请求需要授权标头(授权:基本)的资源时,我按如下方式创建请求:
import 'package:http/http.dart' as http;
void request() {
http.get('http://<my_url>', headers: {'Authorization': 'Basic <hash>'}).then( (resp) {
print('response status: ${resp.statusCode} ${resp.reasonPhrase}');
}
}
在执行此请求时,我正在查看通过 Wireshark 发送的请求,并注意到它在末尾包含回车符 (\r) 和换行符 (\n): Wireshark 的快照
调用我的请求函数后,我在打印语句中收到 401 Unauthorized 消息。当我在 Postman 中调用相同的请求时,一切都很好。
我假设我的身份验证失败,因为每个标题条目末尾的这些字符 (\r\n)。任何人都可以帮助我还是我做错了什么?
PS.:我也尝试过 http_auth 包,但它也失败了。
import 'package:http_auth/http_auth.dart' as http_auth;
void request(String user, String password) {
http_auth.BasicAuthClient(user, password).get('http://<my_url>', headers: {'Authorization': 'Basic <hash>'}).then( (resp) {
print('response status: ${resp.statusCode} ${resp.reasonPhrase}');
}
}
解决方案
这些\r\n
角色注定要在那里。它们是标题之间的行分隔符。如果您从数据包中捕获线路字节,curl --user foo:bar www.dart.dev
您将看到完全相同的内容。
您会注意到 Dart 已将标头名称小写为authorization
as 根据 RFC 完全有效。但是,这有时会发现一些(错误地)区分标题名称大小写的服务器。
再次尝试您的邮递员(或带有手动创建的小写标题的 curl)authorization
。如果服务器不接受,请联系服务器维护人员。
推荐阅读
- jpa - Kotlin JPA 继承建议
- java - 对象构造在实践中是否保证所有线程都看到初始化的非最终字段?
- amazon-web-services - AWS Cloud9 ...很好,但我只能从默认 VPC 中的根账户启动它
- javascript - 使用本地存储来保持侧边栏的位置
- node.js - 使用 Node.js 控制多个 MAX7219
- python - 如何在 Python 中压缩文件而不是文件夹/目录
- python-3.x - 错误:'builtin_function_or_method' 对象不可迭代
- python - Discordpy Selfbot 不加入服务器但不引发错误
- node.js - 如何在节点 js 中上传 OneSignal SDK 文件?
- python - Spark 2 Python重命名列并设置列数据类型