ios - 错误域=NSPOSIXErrorDomain 代码=100 "Protocol error"

标签 ios swift alamofire

我正在尝试使用 .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-LengthContent-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/

相关文章:

ios - 如何在 swift 中添加位置图标?

ios - 使用 Almofireimage 下载然后缓存单元格图像

iphone - 如何在 objective-c 中获取该月的第 n 个星期日日期?

ios - 如何在 iOS 上捕获的视频中添加水印 - Swift 编程

ios - 使用从 Firebase 获取的数据填充 tableView

ios - 用于 Swift 2.0 的 Alamofire 和 SwiftyJSON

ios - Alamofire 3->4 Response 和 Response Serializer Swift 3.0 的问题

android - ionic 应用程序在 Windows 上运行但不能在 mac 上使用 ios 模拟器运行

ios - 应用程序在运行 iOS 9.2.1 或更低版本的设备上崩溃(不是 P3 图像)

ios - 多个列,例如使用 UICollectionView Swift 的电子表格表