Hata Domain = NSURLErrorDomain Code = -1005 “Ağ bağlantısı kesildi.”


268

Hem iOS7 hem de iOS8 ile Xcode6-Beta1 ve Xcode6-Beta2 üzerinde iyi çalışan bir uygulamam var. Ancak Xcode6-Beta3, Beta4, Beta5 ile iOS8 ile ağ sorunları yaşıyorum, ancak iOS7'de her şey iyi çalışıyor. Hatayı alıyorum "The network connection was lost.". Hata aşağıdaki gibidir:

Hata: Hata Domain = NSURLErrorDomain Code = -1005 "Ağ bağlantısı kesildi." UserInfo = 0x7ba8e5b0 {NSErrorFailingURLStringKey =, _kCFStreamErrorCodeKey = 57, NSErrorFailingURLKey =, NSLocalizedDescription = Ağ bağlantısı kesildi., _KCFStreamErrorDomainKey = 1, NSUocalDescription = "ağ07

Ağ araması yapmak için AFNetworking 2.x ve aşağıdaki kod snippet'ini kullanıyorum:

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);
      }];

Denedim NSURLSessionama yine de aynı hatayı alıyorum.


Herhangi bir güncelleme ? Benim için sadece Wifi'de iOS 8'de oluyor, hala bir çözüm bulmaya çalışıyor.
Dimillian


Herkes sorunumu çözmek için bana yardımcı olabilir, neredeyse aynı sorunu ama farklı hata kodu, stackoverflow.com/questions/26972822/…
iYoung

1
10.0.1 ve Xcode 8 ile aynı sorunla karşı karşıya
Satheeshwaran

1
Bu hatayı bu sabah aldım ve şimdi basit ve garip bir çözümle düzelttim. İstenen sunucu adresi yanlış, 4xx veya 5xx durum kodu döndürülmedi, sadece bu sorunla karşılaştı, kök nedenin tam olarak ne olduğundan emin değilim. Bu nedenle, lütfen ekibinizdeki arka uç geliştiricileriyle onaylayın, yoksa birkaç saatinizi harcayacaksınız.
Itachi

Yanıtlar:


414

Simülatörün yeniden başlatılması sorunu benim için düzeltti.


3
Bu sorun simde değil cihazda ise ne olur? Cihazı yeniden başlatmayı denedim, yine de aynı hata.
Sean Clark

2
@SeanClark: bir sonraki cevaba bakın: simülatörün yeniden başlatılması çalışır, çünkü işletim sistemi sunucu tarafından bırakıldıktan sonra onları yeniden kullanmaya çalışmak yerine ölü bağlantıyı kesmelidir. Bu soruna geçici bir çözüm bulmak için, iOS istemcileri için sunucuda Canlı tutma mekanizmasını devre dışı bırakabilirsiniz veya sunucuya erişiminiz yoksa, başarısız olduğunda aynı isteği yeniden deneyebilirsiniz (başarısızlık işletim sistemi bağlantıyı bırakır ve yeniden deneme gönderildiğinde yeni bir bağlantı başlatılır).
Arthur

Şu anda Xcode 6.2 kullanıyorum ve iOS Simulator> Ayarları ve İçeriği Sıfırla'yı tıklamak neyi çözdü. Bu bittiğinde simülatörü bıraktım ve projemi yeniden kurdum ve çalıştırdım ... daha sonra her şey mükemmel çalıştı.
KingPolygon

Simülatörü sıfırlamak benim için çalıştı ama zamanın sadece% 10'u. Yeni bir ISS aldım ve biraz garip geliyor. Bu simülatörde her zaman oluyor. Ağ olabilir.
noobsmcgoobs

1
Simülatörü sıfırlamak benim için işe yaramadı. Ancak Charles'ın başlaması, ortadan kaybolmaya neden oldu. Charles kullanmayı öneren stackoverflow.com/a/26066764/598057 adresine bakın . Çok garip ama çalışıyor ...
Stanislav Pankevich

231

Bu tam hatayı aldık ve temel HTTP uygulamasında bir sorun olduğu ortaya çıktı NSURLRequest:

İOS 8/9/10/11 ifadesini kullanarak bir HTTP yanıtı aldığınızda Bildiğim kadarıyla biz söyleyebilirim, Keep-Alivebaşlığında, o (olması gerektiği gibi) daha sonra yeniden kullanmak için bu bağlantıyı tutar, ama daha fazla için saklar, timeoutbir parametre Canlı tutma üstbilgisi (bağlantıyı her zaman 30 saniye canlı tutuyor gibi görünüyor.) Ardından, uygulama tarafından 30 saniyeden daha kısa bir süre sonra ikinci bir istek gönderildiğinde, sunucu tarafından bırakılmış olabilecek bir bağlantıyı yeniden kullanmaya çalışır. (gerçek olandan daha fazla zaman Keep-Alivegeçtiyse).

İşte şimdiye kadar bulduğumuz çözümler:

  • Sunucunun zaman aşımı parametresini 30 saniyenin üzerine çıkarın. İOS her zaman, Keep-Alive üstbilgisinde sağlanan değerden bağımsız olarak bağlantıyı 30 saniye açık tutacakmış gibi görünüyor. (Bu KeepAliveTimeoutseçenek Apache için seçenek ayarlanarak yapılabilir .
  • Uygulamanızın Kullanıcı Aracısına dayalı olarak iOS istemcileri için canlı tutma mekanizmasını devre dışı bırakabilirsiniz (örneğin, Apache için: BrowserMatch "iOS 8\." nokeepalivemod dosyasında setenvif.conf)
  • Sunucuya erişiminiz yoksa, isteklerinizi bir Connection: closebaşlık ile göndermeyi deneyebilirsiniz : bu, sunucuya bağlantıyı derhal bırakmasını ve canlı tutma üstbilgileri olmadan yanıt vermesini söyler. AMA şu anda NSURLSession Connection, istekler gönderildiğinde üstbilgiyi geçersiz kılıyor gibi görünüyor (Apache yapılandırmasını değiştirebildiğimiz için bu çözümü kapsamlı bir şekilde test etmedik)

7
İşte sorunu gösteren örnek bir proje, Apple'a da bir hata raporu gönderildi. cl.ly/Xgkl/keep-alive-fail.zip Projeyi başlatın, ilk gönderi düğmesine tıklayın (ekranın üstünde), 5 saniye bekleyin, tekrar tıklayın, hata.
Dimillian

5
Hayatta kalmak iki taraflıdır. İstemciler varsayılan olarak bir http üstbilgisi ekleyecektir: "Bağlantı: Canlı Tutma", istemci isteklerine canlı tutma parametreleri eklemek yardımcı olabilir; örneğin "Canlı Tut: maks = 1". Arthur'un yorumu çok faydalıdır, ancak iOS8 simülatör ağında 1'den fazla sorun olduğunu gösterir. Bir bağlantı göndermeden önce http başarısız olduğundan https kullanmam gerekiyor.
ptc

5
Merhaba arkadaşlar, cihazda da aynı sorunu yaşıyorum. Bunun için bir düzeltme var mı? Ancak iOS 7'de sorun yok.
Andres C

9
İpucu: NSURLErrorNetworkConnectionLostsabit kodlama yerine sabiti kullanabilirsiniz -1005.
Vincent Tourraine

6
Bu sorun iOS 11.2.6'da hala mevcut.
Makalele

47

Mayın, için Resetting content and settingsSimülatör eserlerin. Simülatörü sıfırlamak için şu adımları izleyin:

iOS Simülatörü -> İçeriği ve Ayarları Sıfırla -> Sıfırla'ya basın (gelen uyarı üzerine)


29

İOS 8.0 simülatör çalışma zamanında, simüle edilen cihaz önyüklenirken ağ yapılandırmanızın değişmesi durumunda, simüle edilmiş çalışma zamanındaki daha yüksek düzeydeki API'lerin (örn. CFNetwork) ağ bağlantısını kaybettiğini düşüneceği bir hata vardır. Şu anda önerilen çözüm, ağ yapılandırmanız değiştiğinde simüle edilen cihazı yeniden başlatmanızdır.

Bu sorundan etkileniyorsanız, daha fazla öncelik elde etmek için lütfen http://bugreport.apple.com adresinden ek yinelenen radarlar gönderin.

Bu sorunu görürseniz olmadan bilinen bir hata değildir ardından ağ yapılandırmaları değiştirdikten, ve kesinlikle sorun bilinen ağ yapılandırması-değişmiş hata olmadığını belirten bir radar bulunmalısınız.


7
Bu sorunu bir cihazda da var.
Darren

@darren O zaman bahsettiğim sorun bu değil. Bir radar vermenizi öneririm.
Jeremy Huddleston Sequoia

4
lütfen radar kimliğinizi ekleyin, böylece kopyaları dosyalamayı kolaylaştırır
Daniel Galasko

11

benim için sorunu çözen şey simülatörü yeniden başlatmak ve içeriği ve ayarları sıfırlamaktı.


Ayrıca, simülatör sıfırlanmadan önce uygulamayı öldürmeye ve Mac'i yeniden başlatmaya yardımcı olur. Ben sık sık farklı wifi noktalar ile yerleri değiştirmek ve bu benim için sorunu gideren bir prosedürdür.
Vladimír Slavík

11

Ayrıca, bağlantı hatasıyla sonuçlanan iOS 8 simülatöründe beta 5 ve AFNetworking 1.3 ile ilgili bir sorun var:

Domain = NSURLErrorDomain Code = -1005 "Ağ bağlantısı kesildi."

Aynı kod iOS 7 ve 7.1 simülatörlerinde iyi çalışıyor ve hata ayıklama proxy'im, bir bağlantı gerçekten denenmeden önce hatanın oluştuğunu gösteriyor (yani istek kaydedilmedi).

NSURLConnection'daki başarısızlığı izledim ve Apple'a hata bildirdim. Ekli resimdeki 5. satıra bakın:

NSURLConnection istemci temsilcisi başarısız oldu.

Kullanım değişikliği https, kesintili hatalar olsa da iOS 8 simülatörlerinden bağlantı yapılmasına izin verir.

Sorun hala Xcode 6.01 (gm) 'de bulunmaktadır.


NSURLSession ve NSURLConnection ile aynı sorunu görüyorum, bu AFNetworking ile ilgili sorunu ortadan kaldırıyor. Ayrıca https ile çalışır ve http ile başarısız bulundu. Hala bir çözüm bulamadım, çözüm buldun mu?
VoidStack

Bir hata (18072300) https çalışması hakkında iyi bilgi olan yorum ekleyeceği bildirildi.
ptc

hata bağlantısını buraya yapıştırabilir misiniz? Teşekkürler çünkü aynı sorun var düşünüyorum ama sadece NSURLConnection (ve delegeler) kullanın ama aynı hata iletisini alıyorum
szuniverse

Apple hata raporu paylaşılamıyor. XCODE 6 beta 7'de hala açık ve hala mevcut. Bir hata raporu da gönderirseniz, bu da önceliğe yardımcı olacaktır.
ptc

Görünüşe göre bu sorun iOS simülatöründe ve gerçek cihazdan yoruldum, iyi çalışıyor. Daha fazla hata ayıklama sorunu buldum iOS simülatörü üzerindeki bağlantı noktası, https bağlantı noktası 443 iyi çalışıyor ve başarısız için kullanılan http için 8080 kullanıyordum. Diğer bağlantı noktalarını kullanmayı denedim ve iOS simülatöründe http araması yapabildim. Beta Xcode 6'daki hata gibi görünüyor, kararlı Xcode 6'yı beklemeniz gerekiyor
VoidStack

10

Alamofire kullanırken bu sorunu yaşıyordum. Benim hatam [:]parametreler GETgöndermek yerine , bir istek üzerine parametreler için boş bir sözlük gönderiyordu nil.

Bu yardımcı olur umarım!


GET ve POST boş gövde sözlüğü ile [:] bu hataya rastgele neden olur. Ben de yararlı olabilir arka uç REST API'ler için Python Flask kullanıyorum.
Mahmoud Fayez

10

Charles'ın açılması sorunu benim için çözdü, bu çok garip görünüyor ...

Charles, bir geliştiricinin, makineleri ve Internet arasındaki tüm HTTP ve SSL / HTTPS trafiğini görüntülemesini sağlayan bir HTTP proxy / HTTP monitörü / Ters Proxy'dir. Bu, istekleri, yanıtları ve HTTP çerezlerini (çerezleri ve önbellek bilgilerini içerir) içerir.


1
Bu benim için de işe yarıyor, çünkü charles sumulator proxy'leri için bir ssl sertifikası kullandığından https kullanmaya benzer bir numara yapıyor
sümer

1
Bu benim için her zaman işe yarıyor! 30 kez denedim ve 30 üzerinden 30 çalışıyor. Fluke olduğunu düşündüm, ama iyi olduğunu bilmek sadece ben değilim.
jdog

2
Charles, makinenizden gelen trafiği izlemenizi sağlayan bir proxy aracıdır. Kontrol charlesproxy.com detaylar için. Charles SSL sertifikası, simülatörün ağ istekleri yapma yeteneğini bozabilir.
Colin Tremblay

@ColinTremblay Simülatörünüzün / cihazınızın proxy kullanacak şekilde yapılandırıldığını düşünüyorum. Proxy'nin kaldırılması da işe yarayacaktır.
bikram990

Gülünç bir şekilde, bu da benim için çalıştı. Charles'ın açılıp iOS Simulator ayarlarını sıfırlaması gerekiyordu.
Matt Andrews

6

Bkz. Pjebs 5 Ocak'ta Github ile ilgili yorum.

Yöntem 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;
}

Ayrıca bazıları siteye yeniden bağlanmayı önerir,

yani İKİ KEZ POST isteği Ateşleme

Çözüm: Siteye bağlantı yapmak için bir yöntem kullanın, return (id), ağ bağlantısı kesildiyse aynı yöntemi kullanmaya geri dönün.

Yöntem 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;
     }

}

Yöntem 1 bana çok yardımcı oldu .. Teşekkürler
Abhishek Mitra

4

Bu hatayı da alıyordum, ancak simülatör yerine gerçek cihazlarda. HTTPS (gunicorn sunucusu) üzerindeki heroku arka ucumuza erişirken ve büyük gövdeli POSTS (64Kb'den fazla bir şey) yaparken hatayı fark ettik. Kimlik doğrulama için HTTP Temel Kimlik Doğrulaması kullanıyoruz ve didReceiveChallenge:hatanın NSURLSession üzerinde temsilci yöntemi kullanılarak DEĞİL , ancak ekleyerek Kimlik Doğrulaması'nı orijinal istek başlığına ekleyerek çözüldüğünü fark ettik Authentiation: Basic <Base64Encoded UserName:Password>. Bu, didReceiveChallenge:temsilci iletisini tetiklemek için gerekli 401'i önler ve sonraki ağ bağlantısı kesilir.


Değerli yorumunuz için çok teşekkür ederim. 64 kb'lik resmin base64 dizesinin altına yüklersem doğru şekilde yüklenir.
Vinayak Bhor

3

Aynı problemim vardı. Çözüm Ben kurdum, basit HTTPBodyama belirlemediniz HTTPMethodiçin POST. Bunu düzelttikten sonra her şey iyiydi.


3

Ben de aynı problemi yaşadım. AFNetworking'in https isteğini nasıl uyguladığını bilmiyorum, ama benim için neden NSURLSession'ın önbellek sorunu.

Benim uygulama safari geri izleme ve sonra bir http isteği sonrası, "http load 1005 başarısız" hatası görünecektir. Kullanmayı bırak "[NSURLSession sharedSession]", ancak aşağıdaki gibi "dataTaskWithRequest:" yöntemini çağırmak için yapılandırılabilir bir NSURLSession örneği kullanmak, sorun çözüldü.

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

Sadece ayarlamayı unutmayın config.URLCache = nil;.


1
Cihazın / simülatörün yeniden başlatılması veya verilerin sıfırlanması bu cevaba bakmalıdır. Bana göre tüm eylemleri, sorunu gerçekten gideren önbelleği temizliyor gibi görünüyor. Yani muhtemelen URL Önbellek sorunu. Şimdi test edeceğim.
Kamran Khan

2

XCode çıkmak, DerivedData klasör içeriğini (~ / Library / Developer / Xcode / DerivedData veya / Library / Developer / Xcode / DerivedData) silmek ve bu işi yapmak için simülatör çıkmak zorunda kaldı.


1
Bu listedeki ilgili tek eylem simülatörü yeniden başlatmaktı. Xcode yeniden başlatılır ve türetilmiş veriler silinir.
Jeremy Huddleston Sequoia

2

Bir iOS 8 cihazında da çalışıyorum. Bu biraz daha ayrıntılı olarak burada ve zaten zaman aşımına uğramış bağlantılarını kullanmaya çalışmaktan iOS vakası gibi görünüyor. Benim sorunum bu bağlantıda açıklanan Keep-Alive sorunu ile aynı değil, ancak aynı sonuç gibi görünüyor.

-1005 hatası aldığımda özyinelemeli bir blok çalıştırarak sorunumu düzelttim ve bağlantı çalışmadan önce bazen özyineleme 100+ kez dönebilse bile bağlantı sonunda gerçekleşir, ancak yalnızca çalıştırmaya sadece bir saniye ekler kez ve ben NSLog benim için yazdırmak için hata ayıklayıcı sadece zamanı.

AFNetworking ile özyinelemeli bir bloğu nasıl çalıştıracağım: Bu kodu bağlantı sınıfı dosyanıza ekleyin

// 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); };
}

Sonra bunu kullanın bunu kullanın:

+ (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);
}

Bir AFHTTPRequestOperationalt sınıf kullandığımı ancak kendi istek kodunuzu eklediğimi göreceksiniz . Önemli recurse(@offset.intValue+1));olan, bloğun tekrar çağrılmasını istiyor.


MyAFHTTPRequestOperation sınıfı nedir?
jdog

Bu sadece bir AFHTTPRequestOperation alt sınıfı. Zaman aşımı ve kimlik doğrulama gibi bazı şeyleri önceden tanımlamak için kullanıyorum.
Darren

2

Sorun bir cihazda oluşuyorsa, trafiğin bir proxy üzerinden geçip geçmediğini kontrol edin (Ayarlar> Wi-Fi> (bilgi)> HTTP Proxy). Charles ile kullanmak için cihaz kurulumumu yaptım, ancak proxy'yi unuttum. Charles olmadan bu hatayı çalıştırıyor gibi görünüyor.


2

Dosyalar bir arka uç sunucusuna yüklenirken bu hatayı herkes alıyorsa, alıcı sunucunun medyanız için izin verilebilecek bir maksimum içerik boyutuna sahip olduğundan emin olun. Benim durumumda, NGINX'in daha yüksek olması gerekiyordu client_max_body_size. NGINX, yükleme yapılmadan önce isteği reddeder, böylece hiçbir hata kodu geri gelmez.


2

Xcode 6.2 beta kullanırken bir iOS 7 cihazında hata alıyordum.

Xcode 6.2 beta'dan 6.1.1'e geri dönmek, en azından bir iOS 7 cihazında sorunu çözdü.


Çözülmesi gereken bir şey olduğunu düşünmüyorum: temeldeki işletim sistemi meşru olsun ya da olmasın bağlantıyı keser. Bir uygulama onunla başa çıkmak için hazırlıklı olmalıdır (çevrimdışı veya herhangi bir şekilde çalışın). Belirli xcode sürümünüzdeki SDK'nın elbette buggy olmadığını varsayalım: cevabım 6.2'nin büyük olasılıkla buggy olduğunu, 6.1.1 iyi olduğunu söyledi. 7.0.1 alfa dereceli bir yazılım iken xcode 6.4 makul derecede kararlı göründüğünde benzer bir şey gözlemlenebilir. Ya da öyle görünüyor.
Anton Tropashko

2

On 2017-01-25Apple Bu hatayla ilgili olarak teknik bir Q & A yayınlandı:

Apple Teknik Soru ve Cevap QA1941

“Ağ bağlantısı kesildi” Hatalarını Giderme

Y: NSURLErrorNetworkConnectionLost, NSURLErrorDomain hata etki alanında -1005 hatasıdır ve kullanıcılara “Ağ bağlantısı kesildi” olarak görüntülenir. Bu hata, HTTP isteği devam ederken HTTP isteğini taşıyan temel TCP bağlantısının kesildiği anlamına gelir (bu konuda daha fazla bilgi için aşağıya bakın). Bazı durumlarda NSURLSession bu tür istekleri otomatik olarak yeniden deneyebilir (özellikle, istek identotent ise), ancak diğer durumlarda HTTP standartları tarafından izin verilmez.

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


1

Aylarca sorun var ve nihayet API alanımızda DNSSEC'yi devre dışı bıraktığımızda her şeyin yolunda olduğunu keşfetti: simple_smile:


2
Lütfen biraz açıklayabilir misiniz?
Groot

1

Bir VPN üzerinden bağlanıyordum. VPN'yi devre dışı bırakmak sorunu çözdü.


1

İsteğin HTTPMethod ayarlanmadan bir NSURLRequest bir NSURLSession geçirirken bu hatayı vuruyordu .

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

Hata Domain = NSURLErrorDomain Code = -1005 "Ağ bağlantısı kesildi."

HTTPMethodYine de ekleyin ve bağlantı iyi çalışıyor

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

1

Diğer uygulamalardan (safari gibi) istekte bulunup bulunamayacağınızı test edin. Değilse bilgisayarınızda bir şey olabilir. Benim durumumda simülatör isteğimi engelleyen Avast Antivirus ile bu sorunu yaşadım (nedenini sorma).


1

Bilgisayarı yeniden başlatmak Xcode9.1 ile benim için sorunu düzeltti. Simülatörü ve Xcode'u yeniden başlattım, işe yaramıyor.


1

Aynı sorunla karşı karşıya kaldım, uygulama için yavaş ağ testi için Network Link Conditioner'ı etkinleştirdim. Bu, bu hatayı birkaç kez yaratıyordu, Bunu devre dışı bıraktığımda Settings > Developer > Network Link Conditioner, sorunumu çözdü.

resim açıklamasını buraya girin

Umarım bu birine yardım eder.


1

Benim durumumda HTTP'ye bağlanıyordum ve HTTPS'de çalışıyordu


0

Aşağıdaki nedenlerden dolayı bu sorunu yaşıyordum.

TLDR:GET Parametreleri URL yerine URL'ye göndermesi gereken bir istek gönderip göndermediğinizi kontrol edinNSURLRequest's HTTBody .

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

Benim app bir ağ soyutlama monte vardı ve tüm istekleri için oldukça iyi çalışıyordu.

Başka bir web hizmetine (kendi değil) yeni bir istek ekledim ve bana bu hatayı atmaya başladı.

Bir oyun alanına gittim ve sıfırdan bir barebone isteği inşa etmeye başladım ve işe yaradı. Bu yüzden sebebi bulana kadar soyutlamama yaklaşmaya başladım.

Benim soyutlama uygulaması bir hata vardı: Ben url kodlanmış parametreleri göndermek gerekiyordu ve aynı zamanda NSURLRequest's HTTBodyözelliği de sorgu parametreleri ile dolduruyordu bir istek gönderiyordu . Kaldırır kaldırmaz HTTPBodyişe yaradı.


0

Bu hatayı alıyordum ve uygulama Postman'ın da düştüğünü ancak uygulama Gelişmiş Dinlenme İstemcisi'nde (ARC) çalıştığını ve Android'de çalıştığını fark ettim. Bu yüzden iletişim hata ayıklamak için Charles yüklemek zorunda kaldı ve cevap kodu -1 olduğunu fark ettim. Sorun, REST programcısının 200 yanıt kodunu döndürmeyi unutmasıydı.

Umarım bu diğer geliştiricilere yardımcı olur.


0

Ne zaman hata -1005 var sonra tekrar API çağırmak gerekir.

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... 
       }
  }];

Fonksiyonu tekrar aramak için kodunuzu eklemeniz gerekir. Bir kez çağrı yöntemi olduğundan emin olun aksi takdirde çağrı özyinelemeli döngü.


0

Tüm cevapların üstünde güzel bir çözüm buldum. Aslında iOS 12 onword için ağ bağlantısı ile ilgili sorun, iOS 12.0 onword'de bir hata olmasıdır. Ve henüz çözüldü. Uygulama arka plandan geldiğinde ve ağ araması yapmaya çalıştığında ve bağlantı kurmada başarısız olduğunda AFNetworking ile ilgili sorun için git hub topluluğundan geçtim. Bunun için 3 gün geçiriyorum ve bunun temel nedenine ulaşmak için birçok şey deniyorum ve hiçbir şey bulamadım. Sonunda bu blogu kırmızıyken karanlıkta biraz ışık aldım https://github.com/AFNetworking/AFNetworking/issues/4279

İOS 12'de bir hata olduğunu söylüyor. Temel olarak, uygulama işletim sistemi ön planda değilse bir ağ çağrısının tamamlanmasını bekleyemezsiniz. Ve bu hata nedeniyle ağ çağrıları düşüyor ve ağ günlüklerinde başarısız oluyor.

Size en iyi öneri, uygulamanızın arka plandan ön plana gelmesi ve ağ çağrısı olduğunda biraz gecikme sağlamaktır. Bu ağ çağrısını belirli bir gecikmeyle gönderim zaman uyumsuzluğunda yapın. Hiçbir zaman ağ araması kesintisi veya bağlantı kaybı yaşamayacaksınız.

Apple'ın henüz çözülmediği için bu sorunun iOS 12 için çözülmesini beklemeyin. Ağ isteğinizin NSURLConnection, NSURLSession veya AFNetworking veya ALAMOFIRE olması için biraz gecikme sağlayarak bu geçici çözümle devam edebilirsiniz. Şerefe :)


0

Fiziksel bir cihazla iOS 12 uygulamasından şirketimin sunucusunu kullanırken aynı sorunla karşılaştım. Sorun, sunucu sabit diskinin doluydu. Sunucuda yer açmak sorunu çözdü.

Aynı hatayı Apple ( URLSession.timeoutIntervalForRequestve URLSession.timeoutIntervalForResource) tarafından sağlanan standart Ağ API'si aracılığıyla parametrelenemeyen bir zaman aşımı nedeniyle bence başka bir durumda buldum . Orada bile .. sunucu cevap daha hızlı yaptı sorunu çözdü

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.