错误域= NSPOSIXErrorDomain代码= 100“协议错误”
我正在尝试使用.get方法使用Alamofire调用服务。 请求没有什么特殊的没有参数只是授权标题。
我在这里有点疯了,因为请求工作正常,当我在postman上使用相同的URL和授权令牌运行时,但是当我用Alamofire运行我的应用程序代码时,它返回此错误:
错误域= NSPOSIXErrorDomain代码= 100“协议错误”UserInfo = {NSErrorPeerAddressKey = {长度= 16,容量= 16,字节= 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一样的错误。 经过几个小时的debugging,问题出在HTTP请求体中。
你应该真的尝试转储HTTP请求/响应正文 ,看看是否有一些格式不正确的字段。 例如, Content-Length
和Content-Type
是正确还是缺失? 根据我的经验,如果这些所需的(基本)头文件格式不正确,它可能无法工作取决于您的操作系统或其他中间networking接受(例如代理,网关,服务器等)
我的错是在方法URLRequest.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
错误地定义了函数参数,最终导致错误的Content-Type
HTTP字段。
然而,它在macOS 10.12但不是12.11,所以你应该确保你的HTTP请求正文没有格式错误 。
希望能帮助到你。
形成你的示例代码,我猜encoding: JSONEncoding.default
是错误的。 由于HTTP GET方法没有正文 ,严格/不健壮的networking组件会拒绝/不理解它。
你的目标是在请求头中设置Accept: application/json
,但是如果你确定响应主体types,则不需要。
尝试replace这个参数:[:]带有参数:nil在您的请求。 奇怪的是它解决了这个问题。
在我的情况下,testingnetworking中有几个F5平衡器。 其中一台F5服务器错误地validation了请求,json的包含@或/的对象被认为是格式错误的。 这个问题很难被发现,因为很多次它是为我工作的,但是很less的时候它不是 – 完全根据我的客户端应用程序与之通信的具体的错误configuration的F5服务器。
我得到这个错误与Apache发送upgrade
头。 这里是Apache关于这个问题的bugzilla讨论的链接。
通过在Apache中添加Header unset Upgrade
来修复主机configuration。
在头文件中添加["Content-Type": "application/json"
]有帮助。