错误域= NSPOSIXErrorDomain代码= 100"协议错误"

Luc*_*hoG 15 ios swift alamofire

我试图使用.get方法使用Alamofire调用服务.请求没有任何特殊的参数,只有Authorization标头.

我在这里有点生气,因为当我使用相同的URL和授权令牌在postman上运行它时请求工作正常,但是当我用Alamofire运行我的应用程序代码时它返回此错误:

错误域= NSPOSIXErrorDomain代码= 100"协议错误"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
    }
}
Run Code Online (Sandbox Code Playgroud)

任何想法将非常感激或指出我正确的方向:)

lon*_*kai 10

我在基础课的Cocoa中得到了与你完全相同的错误URLSession.经过几个小时的调试,问题出在HTTP请求体中.

您应该尝试转储HTTP请求/响应正文以查看是否存在某些格式错误的字段.例如,Content-LengthContent-Type是正确的或丢失?根据我的经验,如果这些必需(基本)标头格式不正确,它可能无法工作,具体取决于您的操作系统或其他中间网络接受(例如代理,网关,服务器等)

我的错是错误放置方法中的函数参数URLRequest.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type"),最终导致错误的Content-TypeHTTP字段.

但是,它适用于macOS 10.12但不适用于12.11,因此您应该确保您的HTTP请求主体没有格式错误.

希望能帮助到你.


形成你的示例代码,我猜错了encoding: JSONEncoding.default.由于HTTP GET方法没有正文,因此严格/不健全的网络组件会拒绝/不理解它.

您的目标是Accept: application/json在请求标头中设置的内容,但如果您确定响应正文类型,则不需要它.


boi*_*kan 5

Apache发送upgrade标头时出现此错误。这是Apache 关于此问题的bugzilla讨论的链接。

通过添加Header unset Upgrade到Apache中的主机配置来修复它。