如何使用 Alamofire 请求获取流 JSON。我正在使用以下函数来获取响应
self.sessionManager?.request(url, method: methodType!, parameters: params, encoding: JSONEncoding.default, headers: headers)
.validate()
.responseJSON { (response) in
if (response.result.error == nil) {
completion(response.result.value as AnyObject?, nil , response.response?.statusCode )
} else {
// debugPrint("HTTP Request failed: \(String(describing: response.result.error))")
completion(nil, response.result.error, response.response?.statusCode)
}
}
我的 API Url 类似于
http://{server Url}/services/data/{number of chunks}/{items in per chunk}
如果块数为 3 且每个块的项目数为 3,我从 API 得到的响应
data: [
{
"invalidDraft": false,
"bulkReserve": false,
"srNo": 0,
"returned": false,
"status": "ACTIVE",
"timestamp": 1580186026419,
},
{
"invalidDraft": false,
"bulkReserve": false,
"srNo": 0,
"returned": false,
"status": "ACTIVE",
"timestamp": 1580186026417,
},
{
"invalidDraft": false,
"bulkReserve": false,
"srNo": 0,
"returned": false,
"status": "ACTIVE",
"timestamp": 1580186026417,
}
]
data: [
{
"invalidDraft": false,
"bulkReserve": false,
"srNo": 0,
"returned": false,
"status": "ACTIVE",
"timestamp": 1580186026417,
},
{
"invalidDraft": false,
"bulkReserve": false,
"srNo": 0,
"returned": false,
"status": "ACTIVE",
"timestamp": 1580186026417,
},
{
"invalidDraft": false,
"bulkReserve": false,
"srNo": 0,
"returned": false,
"status": "ACTIVE",
"timestamp": 1580186026417,
}
]
data: [
{
"invalidDraft": false,
"bulkReserve": false,
"srNo": 0,
"returned": false,
"status": "ACTIVE",
"timestamp": 1580186026417,
},
{
"invalidDraft": false,
"bulkReserve": false,
"srNo": 0,
"returned": false,
"status": "ACTIVE",
"timestamp": 1580186026417,
},
{
"invalidDraft": false,
"bulkReserve": false,
"srNo": 0,
"returned": false,
"status": "ACTIVE",
"timestamp": 1580186026417,
}
]
data:done
我没有得到服务器的任何响应,但在 Postman 中它工作正常。
最佳答案
要接收流数据,您可以尝试添加
request.stream(closure: { data in ... })
在闭包内部,您应该在调用响应后从服务器收集数据块并在最近解析它们。
在这种情况下,响应将为零。
所以它会是这样的:
let mData = NSMutableData()
self.sessionManager?
.request(url, method: methodType!, parameters: params, encoding: JSONEncoding.default, headers: headers)
.validate()
.stream(closure: { data in mData.append(data) })
.response { response in
//parse mData
}
关于使用 Alamofire Swift 分块流式传输 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60274459/