source

-1103 오류 Domain=NSURLerrorDomain Code=-1103 "리소스가 최대 크기를 초과합니다" iOS 13

lovecheck 2023. 9. 4. 20:24
반응형

-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를 위해GETAPI 요청입니다.

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으로 바꾸기만 하면 됩니다.

내 해결책은 오직 설정하는 것입니다..parameters0까지, 그러면 모든 것이 잘 작동합니다.스위프트에서는 여전히 값을 초기화하기 때문입니다..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

반응형