当响应在iOS 13上达到某种程度的大(14kb)时,我们将面临以下网络错误。
[-1103] Error Domain=NSURLErrorDomain Code=-1103 "resource exceeds maximum size"
在使用Alamofire时,此问题被视为错误结果,这破坏了我们对结果的处理。
奇怪的是,如果我们直接使用NSURLSession,尽管从日志记录中仍然可以看到此错误,但实际上我们不会在
的回调中收到它session.dataTask(with: request) { value, response, error in ... }
所以结果可以正确处理。
此问题从未见过。有人对此有想法吗?
答案 0 :(得分:7)
我遇到了同样的问题,并找到了解决方案。
使用GET时无法在主体中传递参数。
如果支持API,请使用POST方法,或通过如下所示的URL传递。
AnyURL?Parameter = Value&Parameter = Value
答案 1 :(得分:3)
只需避免针对httpBody
API请求使用GET
。
if requestType != .get{
request.httpBody = data
}
对于GET
请求,请将参数而不是httpBody
一切都像魅力一样。
答案 2 :(得分:2)
我遇到了这个问题,因为我在发送get请求时在Alamofire中传递了空参数。因此,我没有发送空参数,而是将其替换为nil。
答案 3 :(得分:2)
在GET
请求中传递查询参数,如下所示:
let parameters: Parameters = [
"param": value
]
Alamofire.request(urlString, method: .get, parameters: parameters, encoding: URLEncoding.queryString)
答案 4 :(得分:2)
我使用默认的url编码而不是默认的json编码,并且对我有用。
Alamofire.request(url, method: .get, parameters: param, encoding: URLEncoding.default)
如果您使用URLRequestConvertible
enum NetworkRouter: URLRequestConvertible {
case someCase(lang:String)
var method: HTTPMethod {
return .get
}
var parameters: Parameters? {
switch self {
case .someCase(let param):
return ["lang": param.lang]
default:
return nil
}
}
var url: URL {
switch self {
case .someCase(let param):
return URL(string: Constants.baseURL + Constants.endPoint)!
default:
return URL(string: Constants.baseURL)!
}
}
var encoding: ParameterEncoding {
return URLEncoding.default
}
func asURLRequest() throws -> URLRequest {
var urlRequest = URLRequest(url: url)
urlRequest.httpMethod = method.rawValue
return try encoding.encode(urlRequest, with: parameters)
}
}
答案 5 :(得分:2)
我更改了编码->
JSONEncoding.default to URLEncoding.default
成功了!
答案 6 :(得分:1)
在Slack社区的帮助下,我们发现答案是
on iOS13, it is not allowed to add a body in GET request.
要使其再次起作用,我们可以切换到发布请求,也可以将正文添加为GET请求的url参数。
答案 7 :(得分:0)
最后找到答案。对于GET服务,我试图添加httpBody。像这样:
do {
request.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted)
} catch let error {
errorCompletion(error)
return
}
解决方案是,如果httpMethod是GET,则添加一个if以避免该代码块。似乎是iOS 13的新行为,而Swift给出的错误消息绝对没有帮助
答案 8 :(得分:0)
当我使用Xcode 11编译时,我只会看到此问题。如果我恢复到Xcode 10.3,则不会再遇到相同的问题。虽然不是永久性的修复,但是如果您需要推出代码,则可以还原,直到有时间修复它为止。
答案 9 :(得分:0)
我的解决方法是我只将 Content-Length
设置为 nil,然后一切正常。因为在 Swift 中它仍然初始化 .parameters
的值。
.parameters
答案 10 :(得分:0)
此处您可能缺少传递给数据任务的 URL 请求的方法。您必须将 POST/PUT/DELETE 添加到 URL 请求方法参数中,如下所示。
var request: URLRequest = URLRequest(url: SOME_VALID_URL)
request.body = SOME_VALID_DATA_IN_BYTES
request.method = "post" --> You are missing this.