gpt4 book ai didi

ios - 使用参数编码 JSONEncoding.default 时请求超时

转载 作者:搜寻专家 更新时间:2023-10-30 22:14:57 25 4
gpt4 key购买 nike

我正在使用 Alamofire 在我的应用程序中执行所有与网络相关的请求。我在获取请求中将参数编码为 JSON 时遇到问题。

按照我的要求:

 Alamofire.request(url, method: .get, parameters: params, encoding: JSONEncoding.default)
.responseJSON(completionHandler: { (response) in
switch response.result {
case .success(let retrivedResult):
print(retrivedResult)
// success(brandTags)
break
case .failure(let errorGiven):
print(errorGiven)
print(String(data: response.data!, encoding: String.Encoding.utf8) ?? "")
failure(APICaller.parseErrorAndGiveMessage(givenError: errorGiven as NSError))
break
}
})

当我如上所述将参数编码为 JSONEncoding.default 时,请求总是超时,并在我的日志中显示以下内容:

2016-12-27 12:22:41.425948 xyz[5140:133008] [] nw_endpoint_flow_service_writes [2.1 35.164.98.40:80 ready socket-flow (satisfied)] Write request has 4294967295 frame count, 0 byte count
2016-12-27 12:23:41.485534 xyz[5140:133041] [] nw_endpoint_flow_service_writes [2.1 35.164.98.40:80 ready socket-flow (satisfied)] Write request has 4294967295 frame count, 0 byte count

Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo={NSUnderlyingError=0x60000024a9b0 {Error Domain=kCFErrorDomainCFNetwork Code=-1001 "(null)" UserInfo={_kCFStreamErrorCodeKey=-2102, _kCFStreamErrorDomainKey=4}}, NSErrorFailingURLStringKey=http://xyz-beta.abc.com/v1/brands/1a1/notifications, NSErrorFailingURLKey=http://xyz-beta.abc.com/v1/brands/1a1/notifications, _kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-2102, NSLocalizedDescription=The request timed out.}
2016-12-27 12:23:41.488336 xyz[5140:133868] [] __tcp_connection_write_eof_block_invoke Write close callback received error: [89] Operation canceled

但是当我像下面这样删除参数编码时,请求可以正常完成,没有任何问题。

Alamofire.request(url, method: .get, parameters: params, encoding: JSONEncoding.default)
.responseJSON(completionHandler: { (response) in
switch response.result {
case .success(let retrivedResult):
print(retrivedResult)
// success(brandTags)
break
case .failure(let errorGiven):
print(errorGiven)
print(String(data: response.data!, encoding: String.Encoding.utf8) ?? "")
failure(APICaller.parseErrorAndGiveMessage(givenError: errorGiven as NSError))
break
}
})

有什么区别?

更新:

我在 Github 上的 Alamofire 社区和 this is their response 上打开了这个问题.希望这对遇到类似问题的人有所帮助。

最佳答案

所以根据 Alamofire 社区在 issue 上的说法我在 GitHub 上打开了我的上述问题,他们建议这是一个非常常见的行为多次出现,解决方案是 URLEncoding.queryStringGET 中的参数进行编码请求,因为某些服务器不喜欢 GET 请求中的 bodyData

基本上我的请求代码是这样修改的:

Alamofire.request(url, method: .get, parameters: params, encoding: URLEncoding.queryString)
.responseJSON(completionHandler: { (response) in
switch response.result {
case .success(let retrivedResult):
print(retrivedResult)
// success(brandTags)
break
case .failure(let errorGiven):
print(errorGiven)
print(String(data: response.data!, encoding: String.Encoding.utf8) ?? "")
failure(APICaller.parseErrorAndGiveMessage(givenError: errorGiven as NSError))
break
}
})

这对我来说非常有效。

关于ios - 使用参数编码 JSONEncoding.default 时请求超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41340500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com