错误域= 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-LengthContent-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" ]有帮助。