【问题标题】:Flutter http_auth headers contain "carrier return" and "new line" characters (\r\n)Flutter http_auth headers 包含“carrier return”和“new line”字符(\r\n)
【发布时间】:2019-11-22 18:22:26
【问题描述】:

我目前正在试验 Flutter 并尝试使用 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): Snapshot of 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}');
    }
}

【问题讨论】:

    标签: flutter http-headers flutter-dependencies


    【解决方案1】:

    那些\r\n 字符应该在那里。它们是标题之间的行分隔符。如果您从curl --user foo:bar www.dart.dev 捕获数据包,您将看到完全相同的内容。

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

    使用authorization 再次尝试您的邮递员(或带有手动创建的小写标题的 curl)。如果服务器不接受,请联系服务器维护者。

    【讨论】:

    • 感谢您的快速答复。你是对的。服务器实际上不接受小写的“授权”。我会尝试在这方面进行调试。谢谢^^
    猜你喜欢
    • 2014-03-24
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    相关资源
    最近更新 更多