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 的卷曲)。如果服务器不接受,请联系服务器维护者。
我目前正在尝试使用 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 的卷曲)。如果服务器不接受,请联系服务器维护者。