Подтвердить что ты не робот

_kCFStreamErrorCodeKey = -2102 только с Wi-Fi некоторых интернет-провайдеров

Я использую ниже код для отправки файла на сервер:

NSString *urlString = [NSString stringWithFormat:@"%@%@",[LIUtility sharedUtility].uploadConnectionURL,BR_SERVER_UPLOAD_ADDRESS_FILE];

self.request =[[NSMutableURLRequest alloc] init];
[self.request setURL:[NSURL URLWithString:urlString]];
[self.request setHTTPMethod:@"POST"];

PKMultipartInputStream *body = [[PKMultipartInputStream alloc] init];

NSString *requestString =[self getRequestStringForRange:range andExtension:fileName];
NSData *requestData = [requestString dataUsingEncoding:NSUTF8StringEncoding];

NSString *jsonLengthString = [NSString stringWithFormat:@"%04lu",(unsigned long)requestData.length];
NSData *jsonLengthData = [jsonLengthString dataUsingEncoding:NSUTF8StringEncoding];

[body addPartWithName:@"jsonLength" data:jsonLengthData];
[body addPartWithName:@"json" data:requestData];
[body addPartWithName:@"separator" string:@"\r\n"];
[body addPartWithName:@"fileData" filename:fileName stream:dataStream streamLength:streamSize];

[self.request setHTTPBodyStream:body];
[self.request setTimeoutInterval:60];
NSString *contentType = LI_CONNECTION_CONTENTTYPE;
[self.request addValue:contentType forHTTPHeaderField: @"Content-Type"];

self.connection = [[NSURLConnection alloc] initWithRequest:self.request delegate:self];
_responseData = [NSMutableData data];
[self.connection start];

Файл загружается с помощью 3G/4G. Код также работает, когда устройство подключено к Wi-Fi некоторых провайдеров ADSL, но в некоторых других интернет-провайдерах код не работает, и я получаю ниже ошибки:

Ошибка домена = NSURLErrorDomain Code = -1001 "Истекло время ожидания запроса". UserInfo = {NSErrorFailingURLStringKey = http://example.net, _kCFStreamErrorCodeKey = -2102, NSErrorFailingURLKey = http:/example.net: 80/au, NSLocalizedDescription = Истекло время ожидания запроса. _kCFStreamErrorDomainKey = 4, NSUnderlyingError = 0x16a40410 {Ошибка домена = kCFErrorDomainCFNetwork Code = -1001 "Истекло время ожидания запроса". UserInfo = {_ kCFStreamErrorCodeKey = -2102, NSErrorFailingURLStringKey = http://example.net, NSErrorFailingURLKey = http://example.net, NSLocalizedDescription = Время ожидания запроса., _kCFStreamErrorDomainKey = 4}}}

Кто-нибудь есть представление о том, в чем проблема?

4b9b3361

Ответ 1

Я, наконец, решил свою проблему, добавив Content-Length к запросу.

Если мы не добавим заголовок Content-Length к запросу, NSURLConnection отправьте его как запрос chunked, и кажется, что такие проблемы встречаются с chunked-запросами.

На самом деле я не нашел основную причину проблемы с этим запросом chunked (я искал много предметов в Интернете, читал много статей, разговаривал с несколькими другими программистами, но не нашел никакой основной причины, поэтому я решил использовать другое решение), но я поделился этим решением для тех, кто может использовать не-chunked запрос в своем бизнесе. Поскольку я знаю, что большинство обычаев запрошенных запросов в реальном времени передаются, что мы не знаем Content-Length, поэтому, если вы можете добавить Content-Length, я предлагаю использовать его для избежания проблем с помехами вроде этого.

Ответ 2

Я только что решил проблему...

Надеюсь, это поможет вам, если вы не найдете решение в Интернете, потому что это личный опыт.

Я настроил все HTTP-заголовки, все параметры и проверил все программы на Objective-C, но я забыл проверить серверную часть, моя архитектура включала в себя 3 компонента: приложение, сервер REST и файловый сервер, файловый сервер имел проблемы с сетью в домене, поэтому причина, по которой приложение не работало, после решения проблемы работало отлично.

Ответ 3

Если вы используете корпоративную версию приложения, обратитесь к администратору сервера, чтобы узнать, обновлен ли ваш сертификат и совместим с вашим сервером брандмауэра. Мой нет.