ASIHTTPRequest, как распознать законченный запрос и неудавшийся запрос? - PullRequest
0 голосов
/ 11 августа 2011

В моем приложении у меня есть кнопка, которая вызывает ASIHTTPRequest.Запрос идет нормально, и я получаю строку ответа.Но когда запрос заканчивается, он всегда переходит к методу: requestFinished.И я также получил метод requestFailed.Но даже когда я даю неправильную ссылку, запрос заканчивается и никогда не перестает работать. Почему это так?Это мой код:

-(void)fetchForm:(id)sender {

    NSURL *URL=[NSURL URLWithString:@"http://www.mydomain.nl/testGet.php"]; 
    ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:URL] autorelease];
    [request setDelegate:self];
    [request setDidFailSelector:@selector(requestFailed:)];
    [request startAsynchronous];

}

-(void)requestFinished:(ASIHTTPRequest *)request {
    NSLog(@"Request Success!");
}

-(void)requestFailed:(ASIHTTPRequest *)request {
    NSLog(@"Request Failed!");
}

РЕДАКТИРОВАТЬ:

Я прочитал небольшую документацию на веб-сайте ASIHTTPRequest.И я пришел к выводу, что мне нужно лично убедиться в наличии кода ошибки.я делаю это с:

int statusCode = [request responseStatusCode];

if (statusCode == 404) {
NSLog(@"Statuscode 404 has occured!");
}

Ответы [ 3 ]

4 голосов
/ 11 августа 2011

Существует несколько условий, которые могут повлиять на отчеты об ошибках с HTTP-запросами. С точки зрения ASIHTTP, если объект запроса может быть успешно построен, отправлен и получен какой-то ответ, то все в порядке.

В моем случае, например, у моего интернет-провайдера есть прокси, который будет возвращать страницу с ошибкой со многими несуществующими URL, а иногда даже с неправильно сформированными URL. В таких случаях ASIHTTP не выйдет из строя. Я не знаю, если это тоже ваш случай, но это было для меня.

Если вы посмотрите на файл ASIHTTPRequest.m и выполните поиск failWithError, вы увидите все случаи, когда ASIHTTP вызовет механизм, который приводит к вызову didFailSelector. Вы можете даже установить точку останова в методе failWithError, чтобы увидеть, вызывается ли он.

EDIT:

В некотором смысле механизм ASIHTTPRequest является очень базовым и охватывает сбои на уровне network . Если вы получили ответ, то это сбой на уровне приложения, и вы должны с ним справиться.

Первым делом проверяется код статуса HTTP:

int statusCode = [request responseStatusCode];
NSString *statusMessage = [request responseStatusMessage];

Это позволит вам идентифицировать 404, 500 и т. Д.

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

0 голосов
/ 11 августа 2011

попробуйте это: -

    [request setDidFinishSelector:@selector(requestFinished:)];
[request setDidFailSelector:@selector(requestFailed:)];

Напишите эти две строки и попробуйте.

0 голосов
/ 11 августа 2011

попробуйте это -

[request setDidFailSelector:@selector(requestFailed:)];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...