Flutter http_auth headers 包含 "carrier return" 和 "new line" 个字符(\r\n)

Flutter http_auth headers contain "carrier return" and "new line" characters (\r\n)

我目前正在尝试使用 flutter 并尝试使用 http 包。当我请求需要授权的资源时 header (授权:基本)我创建我的请求如下:

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 发送的请求并注意到它在末尾包含 carrier-return (\r) 和 new-line (\n) 字符: Snapshot of Wireshark

调用请求函数后,我在打印语句中收到 401 Unauthorized 消息。当我在 Postman 中调用相同的请求时,一切正常。

我假设我的身份验证失败了,因为每个 header 条目末尾都有这些字符 (\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 个角色注定要在那里。它们是 header 之间的行分隔符。如果您从 curl --user foo:bar www.dart.dev 中捕获有线字节,您将看到完全相同的东西。

您会注意到 Dart 将 lower-cased 的 header 名称改为 authorization,这在 RFC 中是完全有效的。但是,这有时会发现一些(错误地)区分大小写 header 名称的服务器。

authorization 再次尝试你的邮递员(或带有 manually-created、lower-case header 的卷曲)。如果服务器不接受,请联系服务器维护者。