这是一个关于http请求返回的错误,当我使用http连接路由器控制台时出现的错误。
HttpException: Invalid response, unexpected 10 in reason phrase
Dart issues: https://github.com/dart-lang/sdk/issues/43916
StackOverflow:https://stackoverflow.com/questions/65492431/express-js-changing-line-break-type-to-crlf
大意是说Flutter的底层http请求后解析返回响应时使用的是 \r
结尾,当遇到以 \n
结尾的就会出现此错误(应该时严格http协议与宽泛协议的问题)。
凡是依赖于官方http的库都会有这个问题,比如:Dio、http 等。
解决方法:
- 修改服务器响应格式,满足 http 解析。(我的服务器是路由器无法修改,不符合😓)
- 自己修改底层重新编译(这个我不会😓)
官方源代码:https://github.com/dart-lang/sdk/blob/master/sdk/lib/_http/http_parser.dart#L607-L617 - 使用不依赖于官方http库的其他库
这个我花了半天的时间寻找和测试发现sync_http
这个包是可用的🎉
sync_http
虽然是同步请求实现的,但是在我的项目中是可用的。
地址👉 https://pub.dev/packages/sync_http
HttpException: Invalid response, unexpected 10 in reason phrase
Unhandled Exception: Invalid response, unexpected 10 in reason phrase