我正在尝试使用 .get 方法调用使用 Alamofire 的服务。 该请求没有什么特别的,没有参数,只有一个授权 header 。
我在这里有点生气,因为当我使用相同的 URL 和授权 token 在 postman 上运行它时请求工作正常,但是当我使用 Alamofire 运行我的应用程序代码时它返回此错误:
Error Domain=NSPOSIXErrorDomain Code=100 "Protocol error" UserInfo={NSErrorPeerAddressKey={length = 16, capacity = 16, bytes = 0x100201bbd83ad0b10000000000000000}, _kCFStreamErrorCodeKey=100, _kCFStreamErrorDomainKey=1}
我正在使用:
Alamofire.request("https://myserverURL", method: .get, parameters: [:], encoding: JSONEncoding.default, headers: ["Authorization":"myToken"])
.responseJSON {response in
guard response.result.error == nil else {
//HERE IS WHERE IS GOING IN WITH THE ERROR
}
}
任何想法将不胜感激或为我指明正确的方向:)
最佳答案
我在基础类 URLSession
中遇到了与您在 Cocoa 中完全相同的错误。经过几个小时的调试,问题出在 HTTP 请求正文中。
您真的应该尝试转储 HTTP 请求/响应正文 以查看是否存在格式错误的字段。例如,Content-Length
和 Content-Type
是对还是错?根据我的经验,如果这些必需的(基本) header 格式不正确,它可能无法工作,具体取决于您的操作系统或其他中间网络接受(例如代理、网关、服务器等)
我的错误是在方法 URLRequest.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
中放错了函数参数,结果是错误的Content-Type
HTTP 字段。
但是,它适用于 macOS 10.12 但不适用于 12.11,因此您应该确保您的 HTTP 请求正文没有格式错误。
希望对您有所帮助。
根据您的示例代码,我猜 encoding: JSONEncoding.default
是错误的。由于HTTP GET 方法没有正文,严格/不稳健的网络组件会拒绝/不理解它。
您的目标是在请求 header 中设置 Accept: application/json
,但是如果您确定响应正文类型则不需要。
关于ios - 错误域=NSPOSIXErrorDomain 代码=100 "Protocol error",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41461481/