一尘不染

错误域= NSPOSIXErrorDomain代码= 100“协议错误”

swift

我正在尝试使用.get方法使用Alamofire调用服务。该请求没有什么特别的,没有任何参数,只是一个Authorization标头。

我在这里有点生气,因为当我在具有相同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
    }
}

任何想法将不胜感激或指向我正确的方向:)


阅读 468

收藏
2020-07-07

共1个答案

一尘不染

在基础课上,我在可可中遇到了与您完全相同的错误URLSession。经过数小时的调试,问题出在HTTP请求正文中。

您实际上应该尝试 转储HTTP请求/响应主体, 以查看是否存在一些格式错误的字段。例如,Content-Length并且Content- 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在请求标头中设置的,但是如果您确定响应正文类型,则不需要设置目标。

2020-07-07