NSURLConnection отключить "слишком много перенаправлений HTTP" - PullRequest
2 голосов
/ 21 февраля 2011

В настоящее время я выполняю множество серверных вычислений, обработка которых занимает некоторое время.

В то же время я перенаправляю пользователя на ту же страницу, пока он не получит ответ.

Это приводит к ошибке «слишком много перенаправлений HTTP». Есть ли способ отключить это или увеличить его порог?

Это происходит на симуляторе и на телефоне.

вот соответствующий код:

//Define request

NSURLRequest *request = [requestGenerator theRequest];



// Execute URL and read response

NSError *error = nil;

NSHTTPURLResponse *httpResponse;

NSData *resp = [NSURLConnection sendSynchronousRequest:request returningResponse:&httpResponse error:&error];



 //If we get a good response

if(resp != nil && httpResponse != NULL && [httpResponse statusCode] >= 200 && [httpResponse statusCode] < 300)

{

   ... 

}



if (error) {

  [self  showErrorMessage:error];

}

1 Ответ

1 голос
/ 21 февраля 2011

Перенаправление на тот же URL крайне расточительно.По крайней мере, присвойте «заданию» идентификатор и верните его вызывающему приложению.Затем он может опросить сервер, передав идентификатор, чтобы увидеть, когда задание будет завершено.Вы не должны опрашивать слишком часто, возможно, раз в несколько секунд.

Вы также можете просто использовать один запрос-ответ.Ваш сервер просто не ответит, пока не получит данные.На iPhone время ожидания по умолчанию установлено на 60 секунд.Ваш сервер может начать ответ (записать немного данных), чтобы установить соединение;но не завершайте и не закрывайте соединение, пока обработка не завершится.

Наконец, если вы делаете простой запрос ... с большой задержкой ... ответ;и ожидайте, что это займет> 60 секунд - рассмотрите возможность увеличения времени ожидания запроса с помощью NSMutableURLRequest's setTimeoutInterval .

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

Наконец, если вы используете асинхронные методы;вы можете перехватить 3xx и обработать его самостоятельно;но вы знаете, ваша техника перенаправления кажется злой, поэтому не делайте этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...