Я отправляю запрос в UIWebView. На загруженной странице есть AJAX-вызовы. Мне нужно проанализировать AJAX-трафик, чтобы определить, вошел ли пользователь в систему или нет. Для этого я установил NSURLCache в AppDelegate:
MYURLCache *cache = [[MYURLCache alloc] init];
[NSURLCache setSharedURLCache:cache];
Этот класс MYURLCache правильно принимает трафик, который проходит через веб-просмотр. Я могу завершить только AJAX-вызовы. Затем я создаю собственный запрос AJAX-вызовов. Он возвращает отличный ответ от веб-сервера. Итак, последний шаг, который нужно сделать сейчас, - это создать объект возврата NSCachedURLResponse. Мне тоже это удалось, но веб-просмотр просто ничего не делает при возврате объектов. Если я верну только nil, WebView загрузит все нормально (nil - это сообщение для NSURLCache, что ничего не кэшируется, поэтому веб-просмотр должен начать загружать его самостоятельно).
- (NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request {
if ([[[request URL] absoluteString] rangeOfString:@"/ajax/"].location == NSNotFound) {
return nil;
} else {
ASIHTTPRequest *asirequest = [ASIHTTPRequest requestWithURL:[request URL]];
[asirequest setValidatesSecureCertificate:NO];
[asirequest startSynchronous];
NSError *error = [asirequest error];
NSData* data = [[asirequest responseString] dataUsingEncoding:NSUTF8StringEncoding];
// Create the cacheable response
NSURLResponse *urlresponse = [[NSURLResponse alloc] initWithURL:[request URL] MIMEType:@"application/json" expectedContentLength:[data length] textEncodingName:@"UTF-8"];
NSCachedURLResponse *cachedResponse = [[NSCachedURLResponse alloc] initWithResponse:urlresponse data:data];
NSLog(@"cachedResponse %@", cachedResponse);
NSLog(@"cachedResponse data %@", [[NSString alloc] initWithData:[cachedResponse data] encoding:NSUTF8StringEncoding]);
return cachedResponse;
}
return nil;
}