NSUrlconnection проблема получения данных от некоторых файловых хостов - PullRequest
0 голосов
/ 09 января 2011

Я пытаюсь разработать менеджер загрузок. Теперь я могу скачивать файлы практически из любого места по ссылке.

в - (BOOL) webView: (UIWebView *) webView shouldStartLoadWithRequest: (NSURLRequest *) запрос navigationType: (UIWebViewNavigationType) navigationType Я проверяю, является ли URL-адрес для бинарного файла, как Zip-файл. чем я настроил соединение


    NSMutableURLRequest  *urlRequest = [NSMutableURLRequest requestWithURL:url
                                                               cachePolicy:NSURLRequestReloadIgnoringLocalCacheData 
                                                               timeoutInterval:20.0];
        [urlRequest setValue:@"User-Agent" forHTTPHeaderField:@"Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en) AppleWebKit/418.9 (KHTML, like Gecko) Safari/419.3"];
        NSURLConnection *mainConnection = [NSURLConnection connectionWithRequest:urlRequest delegate:self];
        if (nil == mainConnection) {
            NSLog(@"Could not create the NSURLConnection object");
        }   </p>

<ul>
<li><p>(void)connection:(NSURLConnection <em>)connection didReceiveResponse:(NSURLResponse</em>)response {
self.tabBarController.selectedIndex=1;
[receivedData setLength:0];
percent = 0;
localFilename = [[[url2 absoluteString] lastPathComponent] copy];
NSLog(localFilename);<br>
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0] ;<br>
NSString *appFile = [documentsDirectory stringByAppendingPathComponent:localFilename];<br>
[[NSFileManager defaultManager] createFileAtPath:appFile contents:nil attributes:nil];
[downloadname setHidden:NO];
[downloadname setText:localFilename];
expectedBytes = [response expectedContentLength];
exp = [response expectedContentLength];
NSLog(@"content-length: %lli Bytes", expectedBytes);
file = [[NSFileHandle fileHandleForUpdatingAtPath:appFile] retain];
if (file)   {</p>

<pre><code>[file seekToEndOfFile];

} }

(void) соединение: (NSURLConnection *) соединение didReceiveData: (NSData *) data { if (file) { [file seekToEndOfFile]; } [файл writeData: data]; [receiveData appendData: data]; long long resourceLength = [длина принятых данных];
float res = [длина полученных данных]; проценты = res / exp; [Ход выполнения скрыт: НЕТ]; [прогресс setProgress: проценты]; NSLog (@ "Remaining:% lli KB", (ОжидаемыйBytes-resourceLength) / 1024); [kbleft setHidden: NO]; [kbleft setText: [NSString stringWithFormat: @ "% lli /% lli KB", ожидаетсяBytes / 1024, (resourceLength) / 1024]]; }

в загрузке соединения окончательно закрываю файл. все работает нормально почти для каждого хостера, кроме хостеров, у которых есть процедура захвата, как filedude.com в uiwebview я могу перейти на страницу загрузки, введите капчу и получите ссылку для скачивания. когда я нажимаю на него, файл будет создан в каталоге документов с именем файла, и загрузка начнется, но он не получит никаких данных. каждый файл имеет 0kb и NSLog (@ "content-length:% lli Bytes", ожидаетсяBytes); выдает что-то вроде 100-400 байт.

Может кто-нибудь помочь мне решить эту проблему?

С уважением

Ответы [ 3 ]

0 голосов
/ 09 января 2011

Посмотрите на ASIHttpRequest

http://allseeing -i.com / ASIHTTPRequest /

Это очень гибкий и надежный. Только если у вас действительно уникальные требования, лучше написать свои собственные.

0 голосов
/ 09 января 2011

Возможно ли, что вы не следуете перенаправлению HTTP?Вы пробовали захватывать и просматривать фактически получаемые данные?

0 голосов
/ 09 января 2011

Должен проверить, что ответ

NSLog(@"%@", [connection allHttpHeaderFields])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...