-1103 오류 Domain=NSURLerrorDomain Code=-1103 "리소스가 최대 크기를 초과합니다" iOS 13
iOS 13에서 응답이 다소 클 때(14kb) 다음과 같은 네트워킹 오류가 발생했습니다.
[-1103] Error Domain=NSURLErrorDomain Code=-1103 "resource exceeds maximum size"
Alamofire를 사용하고 있기 때문에 이 문제는 오류 결과로 처리되어 결과에 대한 처리가 중단됩니다.
이상한 것은 우리가 NSURL 세션을 직접 사용하면 이 오류가 로깅에서 여전히 표시되지만 실제로는 콜백으로 수신되지 않는다는 것입니다.
session.dataTask(with: request) { value, response, error in ... }
그래서 결과가 올바르게 처리될 수 있습니다.
이 문제는 이전에는 결코 발생하지 않았습니다.누가 그것에 대해 생각해 본 사람?
슬랙 공동체의 도움으로, 우리는 답이라는 것을 알게 되었습니다.on iOS13, it is not allowed to add a body in GET request.
다시 작동하려면 POST/PUT 요청으로 전환하거나 GET 요청의 url 매개 변수를 통해 본문 값을 추가할 수 있습니다.
쿼리 매개 변수 전달GET
다음과 같은 요청:
let parameters: Parameters = [
"param": value
]
Alamofire.request(urlString, method: .get, parameters: parameters, encoding: URLEncoding.queryString)
저는 같은 문제에 직면했고 해결책을 알아냈습니다.
GET를 사용하는 동안에는 매개 변수를 본문에 전달할 수 없습니다.
API가 지원하는 경우 POST 방법을 사용하거나 아래와 같은 URL로 전달하십시오.
임의 URL?매개 변수=값&매개 변수=값
드디어 답을 찾았습니다.GET 서비스를 위해 httpBody를 추가하려고 했습니다.이와 같은 것:
do {
request.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted)
} catch let error {
errorCompletion(error)
return
}
해결책은 httpMethod가 GET인 경우 코드 덩어리를 피하기 위해 if를 추가하는 것이었습니다.iOS 13의 새로운 동작으로 보이며 Swift가 제공하는 오류 메시지는 전혀 도움이 되지 않습니다.
알라모 화재:이거 한번 드셔보세요.
Alamofire.request(urlString, method: .get, parameters: parameters, encoding: URLEncoding.queryString)
그냥 피하세요.httpBody
를 위해GET
API 요청입니다.
if requestType != .get{
request.httpBody = data
}
#OR
위해서GET
대신 URL에 매개 변수 추가를 요청HTTP body
아래 확장명을 사용하여 사전에서 쿼리 매개 변수를 만듭니다.
extension NSObject {
func buildQueryString(fromDictionary parameters: [String:String]) -> String {
var urlVars = [String]()
for (var k, var v) in parameters {
let characters = (CharacterSet.urlQueryAllowed as NSCharacterSet).mutableCopy() as! NSMutableCharacterSet
characters.removeCharacters(in: "&")
v = v.addingPercentEncoding(withAllowedCharacters: characters as CharacterSet)!
k = k.addingPercentEncoding(withAllowedCharacters: characters as CharacterSet)!
urlVars += [k + "=" + "\(v)"]
}
return (!urlVars.isEmpty ? "?" : "") + urlVars.joined(separator: "&")
}
}
나는 기본 json 인코딩 대신 기본 url 인코딩을 사용했고 그것은 나에게 효과가 있었습니다.
Alamofire.request(url, method: .get, parameters: param, encoding: URLEncoding.default)
OR
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)
}
}
get request를 보낼 때 Alamofire에 빈 매개 변수를 전달하기 때문에 그 문제가 발생했습니다.따라서 빈 매개 변수를 보내는 대신 0으로 바꾸기만 하면 됩니다.
내 해결책은 오직 설정하는 것입니다..parameters
0까지, 그러면 모든 것이 잘 작동합니다.스위프트에서는 여전히 값을 초기화하기 때문입니다..parameters
.
self.request.parameters = nil
여기서 데이터 태스크로 전달하는 URL 요청의 메서드가 누락되었을 수 있습니다.당신은 아래와 같이 URL 요청 방법 파라미터에 POST/PUT/DELETE를 추가해야 합니다.
var request: URLRequest = URLRequest(url: SOME_VALID_URL)
request.body = SOME_VALID_DATA_IN_BYTES
request.method = "post" --> You are missing this.
Xcode 11로 빌드할 때만 이 문제가 발생합니다.Xcode 10.3으로 되돌리면 더 이상 같은 문제가 발생하지 않습니다.영구적인 수정은 아니지만 코드를 밀어내야 하는 경우 수정할 시간이 있을 때까지 되돌릴 수 있습니다.
언급URL : https://stackoverflow.com/questions/56955595/1103-error-domain-nsurlerrordomain-code-1103-resource-exceeds-maximum-size-i
'source' 카테고리의 다른 글
Angular 2의 하위 구성 요소에서 상위 구성 요소 속성 업데이트 (0) | 2023.09.04 |
---|---|
콘다 + 시를 사용하는 것이 말이 됩니까? (0) | 2023.09.04 |
IIS Express를 클래식 파이프라인 모드로 강제 설정 (0) | 2023.09.04 |
전체 화면을 채우시겠습니까? (0) | 2023.08.30 |
컴파일 시 GCC의 현재 버전을 어떻게 테스트합니까? (0) | 2023.08.30 |