Error Domain = NSURLErrorDomain Code = -1005“네트워크 연결이 끊어졌습니다.”


268

iOS7과 iOS8 모두 Xcode6-Beta1 및 Xcode6-Beta2에서 잘 작동하는 응용 프로그램이 있습니다. 그러나 Xcode6-Beta3, Beta4, Beta5에서는 iOS8의 네트워크 문제에 직면하고 있지만 iOS7에서는 모든 것이 잘 작동합니다. 오류가 발생 "The network connection was lost."합니다. 오류는 다음과 같습니다.

오류 : 오류 Domain = NSURLErrorDomain 코드 = -1005 "네트워크 연결이 끊어졌습니다." UserInfo = 0x7ba8e5b0 {NSErrorFailingURLStringKey =, _kCFStreamErrorCodeKey = 57, NSErrorFailingURLKey =, NSLocalizedDescription = 네트워크 연결이 끊어졌습니다. _kCFStreamErrorDomainKey = 1, NSUnderlyingError = 0x7a6957e0 "네트워크 연결이 끊어졌습니다."}

AFNetworking 2.x와 다음 코드 스 니펫을 사용하여 네트워크 호출을합니다.

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager setSecurityPolicy:policy];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];

[manager POST:<example-url>
   parameters:<parameteres>
      success:^(AFHTTPRequestOperation *operation, id responseObject) {
          NSLog(@“Success: %@", responseObject);
      } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
          NSLog(@"Error: %@", error);
      }];

시도 NSURLSession했지만 여전히 같은 오류가 발생합니다.


모든 업데이트 ? Wi-Fi의 iOS 8에서만 발생하며 여전히 해결 방법을 찾고 있습니다.
Dimillian


누구나 내 문제, 거의 같은 문제이지만 다른 오류 코드, stackoverflow.com/questions/26972822/…
iYoung

1
iOS 10.0.1 및 Xcode 8과 동일한 문제에 직면합니다.
Satheeshwaran

1
오늘 아침 에이 오류가 발생하여 지금 간단하고 이상한 해결책으로 수정했습니다. 요청한 서버 주소가 잘못되었습니다. 4xx 또는 5xx 상태 코드가 반환되지 않았습니다.이 문제가 발생했습니다. 근본 원인이 정확히 무엇인지 확실하지 않습니다. 따라서 팀의 백엔드 개발자에게 확인하십시오. 그렇지 않으면 몇 시간이 걸릴 것입니다.
Itachi

답변:


414

시뮬레이터를 다시 시작하면 문제가 해결되었습니다.


3
이 문제가 시뮬레이션이 아닌 장치에있는 경우 어떻게됩니까? 장치를 다시 시작하려고 시도했지만 여전히 동일한 오류입니다.
Sean Clark

2
@SeanClark : 다음 답변 참조 : OS가 서버에 의해 연결을 끊은 후에 다시 연결하려고하지 않고 연결이 끊어진 연결을 끊어야하기 때문에 시뮬레이터 재부팅이 작동합니다. 이 문제를 해결하려면 iOS 클라이언트에 대해 서버에서 Keep-alive 메커니즘을 비활성화하거나 서버에 액세스 할 수없는 경우 실패했을 때 동일한 요청을 다시 시도하면됩니다 (실패해야 함) OS가 연결을 끊고 다시 시도가 전송되면 새로운 연결이 인스턴스화됩니다.
Arthur

현재 Xcode 6.2를 사용하고 있으며 iOS 시뮬레이터> 설정 및 내용 재설정을 클릭하여 해결되었습니다. 완료되면 시뮬레이터를 종료하고 프로젝트를 다시 빌드하고 실행했습니다 ... 모든 것이 완벽하게 작동했습니다.
KingPolygon

시뮬레이터를 재설정하지만 시간의 10 % 만 작동했습니다. 방금 새 ISP를 얻었고 다소 이상해졌습니다. 이것은 시뮬레이터에서 항상 발생합니다. 네트워크가 될 수 있습니다.
noobsmcgoobs

1
시뮬레이터 재설정이 효과가 없었습니다. 그러나 Charles를 시작하면 문제가 사라졌습니다. Charles 사용을 제안하는 stackoverflow.com/a/26066764/598057 을 참조하십시오 . 매우 이상하지만 효과가 있습니다 ...
Stanislav Pankevich

231

이 정확한 오류가 있었고 기본 HTTP 구현에 문제가있는 것으로 나타났습니다. NSURLRequest :

우리가 알 수있는 한, iOS 8/9/10/11이 Keep-Alive헤더 로 HTTP 응답을 수신하면 나중에 다시 사용해야하기 위해이 연결을 유지하지만 timeout매개 변수 이상의 매개 변수는 유지합니다. Keep-Alive 헤더 (항상 30 초 동안 연결을 유지하는 것 같습니다.) 그런 다음 30 초 이내에 앱에서 두 번째 요청을 보내면 서버에서 삭제되었을 수있는 연결을 다시 사용하려고 시도합니다. (실제보다 많으면Keep-Alive 경과 한 경우).

지금까지 찾은 솔루션은 다음과 같습니다.

  • 서버의 시간 종료 매개 변수를 30 초 이상 늘리십시오. Keep-Alive 헤더에 제공된 값에 관계없이 서버가 30 초 동안 연결을 유지하는 것처럼 iOS가 항상 작동하는 것처럼 보입니다. (이것은 Apache에서KeepAliveTimeout 옵션 옵션 .
  • 앱의 User-Agent (예 : BrowserMatch "iOS 8\." nokeepalivemod 파일의 Apache :)를 기반으로 iOS 클라이언트에 대한 연결 유지 메커니즘을 비활성화 할 수 있습니다.setenvif.conf )
  • 서버에 액세스 할 수없는 경우 Connection: close헤더를 사용 하여 요청을 보낼 수 있습니다 . 이렇게하면 서버가 연결을 즉시 끊고 활성 헤더를 유지하지 않고 응답하도록 지시합니다. 그러나 현재 NSURLSession은 Connection요청을 보낼 때 헤더 를 재정의하는 것으로 보입니다 (아파치 구성을 조정할 수 있으므로이 솔루션을 광범위하게 테스트하지는 않았습니다)

7
다음은 문제를 보여주는 예시 프로젝트이며 버그 보고서가 Apple에 제출되었습니다. cl.ly/Xgkl/keep-alive-fail.zip 프로젝트를 시작하고 첫 번째 게시 버튼 (화면 상단)을 클릭하고 5 초 동안 기다렸다가 다시 클릭하면 오류가 발생합니다.
Dimillian

5
연결 유지는 양방향입니다. 클라이언트는 기본적으로 http 헤더 "Connection : Keep-Alive"를 추가합니다. 클라이언트 요청에 keep-alive 매개 변수를 추가하면 도움이 될 수 있습니다. 예 : "Keep-Alive : max = 1". Arthur의 의견은 매우 유용하지만 iOS8 시뮬레이터 네트워킹에서 하나 이상의 문제를 나타냅니다. 요청을 보내기 전에 http가 실패 할 때 https를 사용하여 연결을 가져와야합니다.
ptc

5
이봐, 나는 장치 에서이 똑같은 문제가 있습니다. 이것에 대한 해결책이 있습니까? iOS 7에는 아무런 문제가 없습니다.
Andres C

9
팁 : NSURLErrorNetworkConnectionLost하드 코딩 대신 상수를 사용할 수 있습니다 -1005.
Vincent Tourraine

6
이 문제는 여전히 iOS 11.2.6에 존재합니다.
Makalele

47

내 경우 Resetting content and settings에는 시뮬레이터가 작동합니다. 시뮬레이터를 재설정하려면 다음 단계를 수행하십시오.

iOS 시뮬레이터-> 내용 및 설정 재설정-> 재설정을 누릅니다 (나올 경고에)


29

iOS 8.0 시뮬레이터 런타임에는 시뮬레이션 된 장치가 부팅되는 동안 네트워크 구성이 변경되면 시뮬레이션 된 런타임의 상위 수준 API (예 : CFNetwork)가 네트워크 연결이 끊어진 것으로 생각합니다. 현재 권장되는 해결 방법은 네트워크 구성이 변경 될 때 시뮬레이션 된 장치를 재부팅하는 것입니다.

이 문제의 영향을받는 경우 http://bugreport.apple.com 에 추가 중복 레이더를 제출 하여 우선 순위를 높이십시오.

네트워크 구성을 변경 하지 않고이 문제가 발생 하면 알려진 버그가 아니며, 알려진 네트워크 구성 변경 버그가 아님을 나타내는 레이더를 제출해야합니다.


7
장치 에도이 문제가 있습니다.
대런

@darren 그렇다면 내가 언급 한 문제가 아닙니다. 레이더를 제출하는 것이 좋습니다.
Jeremy Huddleston Sequoia

4
복제 기록을보다 쉽게 ​​만들 수 있도록 레이더 ID를 포함하십시오
Daniel Galasko

11

나를 위해 문제를 해결 한 것은 시뮬레이터를 다시 시작하고 내용과 설정을 재설정하는 것이 었습니다.


또한 시뮬레이터를 재설정하기 전에 앱을 종료하고 Mac을 다시 시작하는 데 도움이됩니다. 나는 종종 다른 와이파이 스팟으로 장소를 변경하고 이것은 나를 위해 문제를 해결하는 절차입니다.
Vladimír Slavík

11

iOS 8 시뮬레이터에서 실행할 때 베타 5 및 AFNetworking 1.3에 문제가있어 연결 오류가 발생합니다.

Domain = NSURLErrorDomain Code = -1005 "네트워크 연결이 끊어졌습니다."

동일한 코드가 iOS 7 및 7.1 시뮬레이터에서 제대로 작동하며 디버깅 프록시는 실제로 연결을 시도하기 전에 실패가 발생한다는 것을 보여줍니다 (즉, 요청이 기록되지 않음).

NSURLConnection의 실패를 추적하고 Apple에 버그를보고했습니다. 첨부 된 이미지의 5 행을 참조하십시오.

NSURLConnection 클라이언트 대리자 오류가 발생했습니다.

사용 변경 https 간헐적 인 오류가 있지만 iOS 8 시뮬레이터에서 연결할 수 있습니다.

Xcode 6.01 (gm)에 여전히 문제가 있습니다.


NSURLSession과 NSURLConnection의 동일한 문제가 AFNetworking의 문제를 배제했습니다. 또한 https와 함께 작동하고 http로 실패한다는 것을 알았습니다. 여전히 해결책을 찾지 못했습니다. 해결책이 있습니까?
VoidStack

버그로보고 된 해결책은 없습니다 (18072300).
ptc

여기에 버그 링크를 붙여 넣을 수 있습니까? 덕분에 나는 같은 문제가 있지만에만있는 NSURLConnection (위임)를 사용하여 생각하기 때문에하지만 같은 오류 메시지가 얻을
szuniverse

Apple 버그 보고서를 공유 할 수 없습니다. 여전히 XCODE 6 베타 7에서 여전히 열려 있고 버그 보고서를 제출하면 우선 순위에 도움이 될 것입니다.
ptc

이 문제는 iOS 시뮬레이터에 있으며 실제 장치로 피곤합니다. 추가 디버깅에서 iOS 시뮬레이터의 포트에 관한 문제를 발견했으며 https 포트 443이 제대로 작동하고 http에 8080을 사용하여 실패했습니다. 다른 포트를 사용해 보았고 iOS 시뮬레이터에서 http 호출을 할 수있었습니다. 베타 버그 엑스 코드 (6)처럼 보인다는 필요가 안정의 엑스 코드 (6)을 기다리는
VoidStack

10

Alamofire를 사용하는 동안이 문제가 발생했습니다. 내 실수는 [:]매개 변수를 GET보내는 것이 아니라 요청시 매개 변수에 대한 빈 사전 을 보내는 것 nil입니다.

도움이 되었기를 바랍니다!


빈 본문 사전 [:]이있는 GET 및 POST는이 오류를 임의로 발생시킵니다. 백엔드 REST API에 Python Flask를 사용하고 있습니다.이 또한 유용 할 수 있습니다.
Mahmoud Fayez

10

Charles를 열면 문제가 해결되어 매우 이상해 보입니다 ...

Charles는 개발자가 자신의 컴퓨터와 인터넷 사이의 모든 HTTP 및 SSL / HTTPS 트래픽을 볼 수 있도록하는 HTTP 프록시 / HTTP 모니터 / 역 프록시입니다. 여기에는 요청, 응답 및 HTTP 헤더 (쿠키 및 캐싱 정보가 포함됨)가 포함됩니다.


1
찰스 사용하여 프록시에 비슷한 트릭을 수행하는 sumulator 요청을 SSL 인증서를 사용하기 때문에 너무 나를 위해이 작품은, 내 생각은 https
thisispete

1
이것은 매번 나를 위해 작동합니다! 그것을 30 번 시도하고 30 중 30으로 작동합니다. 나는 그것이 우연하다고 생각했지만 그것이 단지 내가 아니라는 것을 아는 것이 좋습니다.
jdog

2
Charles는 컴퓨터에서 발생하는 트래픽을 볼 수있는 프록시 도구입니다. 자세한 내용은 charlesproxy.com 을 확인 하십시오. Charles SSL 인증서는 시뮬레이터가 네트워크 요청을하는 기능을 망칠 수 있습니다.
Colin Tremblay

@ColinTremblay 시뮬레이터 / 장치가 프록시를 사용하도록 구성되어 있다고 생각합니다. 프록시 제거도 작동합니다.
bikram990

어리석게도 이것은 나를 위해 일했습니다. Charles를 열고 iOS 시뮬레이터 설정을 재설정해야합니다.
매트 앤드류스

6

Github의 1 월 5 일에 대한 pjebs 의견을 참조하십시오.

방법 1 :

if (error.code == -1005)
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{

        dispatch_group_t downloadGroup = dispatch_group_create();
        dispatch_group_enter(downloadGroup);
        dispatch_group_wait(downloadGroup, dispatch_time(DISPATCH_TIME_NOW, 5000000000)); // Wait 5 seconds before trying again.
        dispatch_group_leave(downloadGroup);
        dispatch_async(dispatch_get_main_queue(), ^{
            //Main Queue stuff here
            [self redoRequest]; //Redo the function that made the Request.
        });
    });

    return;
}

또한 사이트에 다시 연결하라는 제안도 있습니다.

, POST 요청을 두 번 실행

솔루션 : 방법을 사용하여 사이트에 연결하고, (id)를 반환하십시오. 네트워크 연결이 끊어지면 같은 방법을 사용하십시오.

방법 2

-(id) connectionSitePost:(NSString *) postSender Url:(NSString *) URL {
     // here set NSMutableURLRequest =>  Request

    NSHTTPURLResponse *UrlResponse = nil;
    NSData *ResponseData = [[NSData alloc] init];

    ResponseData = [NSURLConnection sendSynchronousRequest:Request returningResponse:&UrlResponse error:&ErrorReturn];

     if ([UrlResponse statusCode] != 200) {

          if ([UrlResponse statusCode] == 0) {

                  /**** here re-use method ****/
                  return [self connectionSitePost: postSender Url: URL];
          }

     } else {
          return ResponseData;
     }

}

방법 1은 많은 도움이되었습니다. 감사합니다
Abhishek Mitra

4

이 오류도 발생했지만 시뮬레이터가 아닌 실제 장치에서 발생했습니다. HTTPS (gunicorn 서버)에서 heroku 백엔드에 액세스하고 큰 본문 (64Kb 이상)으로 POSTS를 수행 할 때 오류가 발생했습니다. 인증에 HTTP 기본 인증을 사용했으며 didReceiveChallenge:NSURLSession 에서 delegate 메소드를 사용하지 않고을 추가하여 Authentication을 원래 요청 헤더에 베이킹 하여 오류가 해결 되었음을 알았습니다 Authentiation: Basic <Base64Encoded UserName:Password>. 이렇게하면 didReceiveChallenge:위임 메시지 를 트리거하는 데 필요한 401 및 후속 네트워크 연결이 끊어지지 않습니다.


소중한 의견에 감사드립니다. 64kb 이미지의 base64 문자열 이하로 업로드하면 성공적으로 업로드됩니다.
Vinayak Bhor

3

나는 같은 문제가 있었다. 솔루션은 내가 설정 한, 간단 HTTPBody하지만 설정하지 않은 HTTPMethodPOST. 이 문제를 해결 한 후 모든 것이 정상이었습니다.


3

나는 같은 문제가 있었다. AFNetworking이 https 요청을 구현하는 방법을 모르겠지만 NSURLSession의 캐시 문제입니다.

내 응용 프로그램이 사파리에서 다시 추적 한 다음 http 요청을 게시하면 "http load failed 1005"오류가 나타납니다. 내가 사용 중지하면 "[NSURLSession sharedSession]",하지만 전화를 구성 NSURLSession 인스턴스를 사용하는 "dataTaskWithRequest는"다음과 같은 방법은 문제가 해결된다.

NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
config.requestCachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
config.URLCache = nil;
self.session = [NSURLSession sessionWithConfiguration:config];

설정해야합니다 config.URLCache = nil;.


1
장치 / 시뮬레이터를 다시 시작하거나 데이터를 재설정하는 모든 사람들 이이 답변을 조사해야한다고 생각합니다. 나에게 그들의 모든 행동은 실제로 문제를 해결하는 캐시를 지우는 것 같습니다. URL 캐시 문제 일 수 있습니다. 나는 지금 그것을 테스트 할 것입니다.
Kamran Khan

2

XCode를 종료하고 DerivedData 폴더 내용 (~ / Library / Developer / Xcode / DerivedData 또는 / Library / Developer / Xcode / DerivedData)을 삭제하고 시뮬레이터를 종료 하여이 작업을 수행해야했습니다.


1
해당 목록에서 유일하게 관련된 조치는 시뮬레이터를 다시 시작하는 것입니다. Xcode를 재시작하고 파생 된 데이터를 삭제하는 것이 과도합니다.
Jeremy Huddleston Sequoia

2

iOS 8 기기에서 실행되는이 문제도 있습니다. 여기에 더 자세히 설명 되어 있으며 이미 시간 초과 된 연결을 사용하려는 iOS의 경우 인 것 같습니다. 내 문제는 해당 링크에서 설명한 Keep-Alive 문제와 동일하지 않지만 동일한 최종 결과 인 것 같습니다.

오류 -1005가 나타날 때마다 재귀 블록을 실행하여 문제를 해결했으며 때로는 연결이 작동하기 전에 재귀가 100 + 번 반복 될 수 있지만 결국에는 연결이 이루어 지지만 실행에 단 2 초만 추가됩니다. 시간과 나는 그것이 디버거가 NSLog를 인쇄하는 데 걸리는 시간 일뿐입니다.

AFNetworking을 사용하여 재귀 블록을 실행하는 방법은 다음과 같습니다.이 코드를 연결 클래스 파일에 추가하십시오.

// From Mike Ash's recursive block fixed-point-combinator strategy https://gist.github.com/1254684
dispatch_block_t recursiveBlockVehicle(void (^block)(dispatch_block_t recurse))
{
    // assuming ARC, so no explicit copy
    return ^{ block(recursiveBlockVehicle(block)); };
}
typedef void (^OneParameterBlock)(id parameter);
OneParameterBlock recursiveOneParameterBlockVehicle(void (^block)(OneParameterBlock recurse, id parameter))
{
    return ^(id parameter){ block(recursiveOneParameterBlockVehicle(block), parameter); };
}

그런 다음 이것을 좋아하십시오 :

+ (void)runOperationWithURLPath:(NSString *)urlPath
            andStringDataToSend:(NSString *)stringData
                    withTimeOut:(NSString *)timeOut
     completionBlockWithSuccess:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
                        failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure
{
    OneParameterBlock run = recursiveOneParameterBlockVehicle(^(OneParameterBlock recurse, id parameter) {
        // Put the request operation here that you want to keep trying
        NSNumber *offset = parameter;
        NSLog(@"--------------- Attempt number: %@ ---------------", offset);

        MyAFHTTPRequestOperation *operation =
            [[MyAFHTTPRequestOperation alloc] initWithURLPath:urlPath
            andStringDataToSend:stringData
            withTimeOut:timeOut];

        [operation setCompletionBlockWithSuccess:
            ^(AFHTTPRequestOperation *operation, id responseObject) {
                success(operation, responseObject);
            }
            failure:^(AFHTTPRequestOperation *operation2, NSError *error) {
                if (error.code == -1005) {
                    if (offset.intValue >= numberOfRetryAttempts) {
                        // Tried too many times, so fail
                        NSLog(@"Error during connection: %@",error.description);
                        failure(operation2, error);
                    } else {
                        // Failed because of an iOS bug using timed out connections, so try again
                        recurse(@(offset.intValue+1));
                    }
                } else {
                    NSLog(@"Error during connection: %@",error.description);
                    failure(operation2, error);
                }
            }];
        [[NSOperationQueue mainQueue] addOperation:operation];
    });
    run(@0);
}

AFHTTPRequestOperation서브 클래스를 사용 하지만 요청 코드를 추가 하는 것을 볼 수 있습니다. 중요한 부분은 recurse(@offset.intValue+1));블록을 다시 호출 하도록 호출 하는 것입니다.


MyAFHTTPRequestOperation 클래스는 무엇입니까?
jdog

AFHTTPRequestOperation 서브 클래스 일뿐입니다. 시간 초과 및 인증과 같은 것을 미리 정의하는 데 사용합니다.
대런

2

장치에서 문제가 발생하면 트래픽이 프록시를 통과하는지 확인하십시오 (설정> Wi-Fi> (정보)> HTTP 프록시). Charles와 함께 사용할 장치 설정이 있었지만 프록시는 잊었습니다. Charles가 실제로 실행하지 않으면이 오류가 발생하는 것 같습니다.


2

백엔드 서버에 파일을 업로드하는 동안 누군가이 오류가 발생하면 수신 서버의 미디어에 허용되는 최대 컨텐츠 크기를 확인하십시오. 제 경우에는 NGINX가 더 높았습니다 client_max_body_size. NGINX는 업로드가 완료되기 전에 요청을 거부하므로 오류 코드가 다시 나타나지 않습니다.


2

Xcode 6.2 베타를 사용할 때 iOS 7 장치에서 오류가 발생했습니다.

Xcode 6.2 베타에서 6.1.1로 다시 전환하면 적어도 iOS 7 기기에서 문제가 해결되었습니다.


해결해야 할 것이 없다고 생각합니다. 기본 OS는 합법적 인 이유로 연결을 끊습니다. 앱은이를 처리 할 준비가되어 있어야합니다 (오프라인으로 작동 또는 기타) 특정 xcode 버전의 SDK가 버그가 아니라고 가정하면 : 내 대답에 따르면 6.2는 버그가 많았지 만 6.1.1은 좋았습니다. 7.0.1이 알파 등급의 소프트웨어 인 반면 xcode 6.4가 상당히 안정적인 것처럼 보일 때 비슷한 점이 발견되었습니다. 또는 그렇게 보인다.
Anton Tropashko

2

2017-01-25애플이 오류에 대한 기술 Q & A를 발표했다 :

애플 기술 Q & A QA1941

"네트워크 연결이 끊어졌습니다"오류 처리

A : NSURLErrorNetworkConnectionLost는 NSURLErrorDomain 오류 도메인에서 오류 -1005이며 사용자에게“네트워크 연결이 끊어졌습니다”로 표시됩니다. 이 오류는 HTTP 요청이 진행되는 동안 HTTP 요청을 전달하는 기본 TCP 연결이 끊어 졌음을 의미합니다 (자세한 내용은 아래 참조). 경우에 따라 NSURLSession은 이러한 요청을 자동으로 (특히 요청이 dem 등원 인 경우) 재 시도하지만 다른 상황에서는 HTTP 표준에서 허용하지 않는 경우가 있습니다.

https://developer.apple.com/library/archive/qa/qa1941/_index.html#//apple_ref/doc/uid/DTS40017602


1

몇 달 동안 문제가 발생하여 마침내 api 도메인에서 DNSSEC를 비활성화하면 모든 것이 정상이라는 것을 발견했습니다.


2
좀 더 자세히 설명해 주시겠습니까?
Groot

1

VPN을 통해 연결하고있었습니다. VPN을 비활성화하면 문제가 해결되었습니다.


1

요청의 HTTPMethod를 설정하지 않고 NSURLRequest를 NSURLSession에 전달할 때이 오류가 발생 했습니다 .

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:urlComponents.URL];

오류 도메인 = NSURLErrorDomain 코드 = -1005 "네트워크 연결이 끊어졌습니다."

을 추가하면 HTTPMethod연결이 제대로 작동합니다.

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:urlComponents.URL];
[request setHTTPMethod:@"PUT"];

1

사파리와 같은 다른 앱에서 요청할 수 있는지 테스트하십시오. 컴퓨터에없는 것일 수 있습니다. 필자의 경우 시뮬레이터 요청을 차단하는 Avast Antivirus 에서이 문제가 발생했습니다 (이유를 묻지 마십시오).


1

컴퓨터를 다시 시작하면 Xcode9.1의 문제가 해결되었습니다. 시뮬레이터와 Xcode를 다시 시작했는데 작동하지 않습니다.


1

나는 같은 문제에 직면하여 앱의 느린 네트워크 테스트를 위해 네트워크 링크 컨디셔너를 활성화했습니다. 이 오류가 몇 번 발생했습니다.에서를 사용 중지하면 Settings > Developer > Network Link Conditioner문제가 해결되었습니다.

여기에 이미지 설명을 입력하십시오

이것이 누군가를 돕기를 바랍니다.


1

제 경우에는 HTTP에 연결하고 HTTPS에서 실행 중이었기 때문입니다.


0

다음과 같은 이유로이 문제가 발생했습니다.

TLDR : 속성 GET대신 URL에 매개 변수를 보내야하는 요청을 보내는 지 확인하십시오 NSURLRequest's HTTBody.

=====================================================

내 앱에 네트워크 추상화를 마운트했으며 모든 요청에 ​​대해 잘 작동했습니다.

다른 웹 서비스 (내 자신이 아닌)에 새로운 요청을 추가 했는데이 오류가 발생하기 시작했습니다.

나는 놀이터에 갔고 맨손으로 요청을 시작했습니다. 그래서 원인을 찾을 때까지 추상화에 더 가까이 다가 가기 시작했습니다.

내 추상화 구현에는 버그가 있습니다 .URL로 인코딩 된 매개 변수를 보내려는 요청을 보내고 있었고 NSURLRequest's HTTBody속성을 쿼리 매개 변수로 채우고 있었습니다. 내가 제거하자마자 HTTPBody효과가있었습니다.


0

이 오류가 발생했으며 Postman 응용 프로그램도 떨어지고 있지만 앱 ARC (Advanced Rest Client)에서 작업하고 Android에서 작업하고 있음을 알았습니다. 그래서 통신을 디버그하기 위해 Charles를 설치해야했고 응답 코드가 -1임을 알았습니다. 문제는 REST 프로그래머가 응답 코드 200을 리턴하는 것을 잊었다는 것입니다.

이것이 다른 개발자에게 도움이되기를 바랍니다.


0

-1005 오류가 발생하면 API를 다시 호출해야합니다.

AFHTTPRequestOperationManager *manager = 
[AFHTTPRequestOperationManager manager];
[manager setSecurityPolicy:policy];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];

[manager POST:<example-url>
   parameters:<parameteres>
    success:^(AFHTTPRequestOperation *operation, id responseObject) {
      NSLog(@“Success: %@", responseObject);
  } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
      NSLog(@"Error: %@", error);
      if (error.code == -1005) {
          // Call method again... 
       }
  }];

함수를 다시 호출하려면 코드를 추가해야합니다. 한 번만 호출 메소드 였는지 확인하십시오. 그렇지 않으면 호출 재귀 루프입니다.


0

모든 답변 위에 하나의 멋진 솔루션을 찾았습니다. 실제로 iOS 12 onword의 네트워크 연결과 관련된 문제는 iOS 12.0 onword에 버그가 있기 때문입니다. 그리고 아직 해결되었습니다. 앱이 백그라운드에서 왔고 네트워크 호출을 시도하고 연결 설정에 실패했을 때 AFNetworking 관련 문제에 대한 git hub 커뮤니티를 살펴 보았습니다. 나는 이것에 3 일을 보내고 이것의 근본 원인에 도달하기 위해 많은 것을 시도하고 아무것도 찾지 못했습니다. 마지막 으로이 블로그를 빨간색으로 만들 때 어둠 속에서 약간의 빛을 얻었습니다 https://github.com/AFNetworking/AFNetworking/issues/4279

iOS 12에는 버그가 있다고합니다. 기본적으로 앱이 포 그라운드에 있지 않으면 네트워크 호출이 완료 될 것으로 예상 할 수 없습니다. 이 버그로 인해 네트워크 호출이 끊어지고 로그에 네트워크 오류가 발생합니다.

내 제안은 앱이 백그라운드에서 포 그라운드로오고 네트워크 호출이있을 때 약간의 지연을 제공하는 것입니다. 디스패치에서 해당 네트워크 호출이 약간 지연되도록 비 동기화하십시오. 네트워크 호출이 끊어 지거나 연결이 끊어지지 않습니다.

아직 해결되지 않았지만 Apple이 iOS 12에서이 문제를 해결할 때까지 기다리지 마십시오. NSURLConnection, NSURLSession 또는 AFNetworking 또는 ALAMOFIRE 인 네트워크 요청에 약간의 지연을 제공하여이 해결 방법을 사용할 수 있습니다. 건배 :)


0

iOS 12 앱에서 회사 서버를 사용하여 물리적 장치로 전화를 걸 때도 같은 문제가 발생했습니다. 문제는 서버 하드 디스크가 가득 찼다는 것입니다. 서버의 공간을 비우면 문제가 해결되었습니다.

Apple ( URLSession.timeoutIntervalForRequestURLSession.timeoutIntervalForResource)에서 제공하는 표준 네트워킹 API를 통해 매개 변수화 할 수없는 시간 초과로 인해 다른 상황에서 동일한 오류가 발견되었습니다 . 서버 응답이 더 빨라져 문제가 해결되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.