2012-09-07 64 views
1

iOS中檢測Web服務器上文件(HTML)存在的正確方法是什麼?使用以下來檢測myfile.html的存在始終返回true。如何檢測Web服務器上文件的存在

NSURL *url = [NSURL URLWithString:@"http://somewebsite.com/myfile.html"]; 
NSURLRequest *requestObject = [NSURLRequest requestWithURL:url]; 

NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:requestObject delegate:self]; 

if (theConnection) { 

    NSLog(@"File exists"); 

} else { 

    NSLog(@"File does NOT exist"); 
} 

我相信它返回到HTTP服務器的連接成功,並且不檢查文件myfile.html是否實際存在。

+0

通過調用'使用HEAD HTTP方法,而不是GET [requestObject setHTTPMethod:@ 「HEAD」];'在'NSMutableURLRequest'如果你不感興趣的文件內容應該是足夠的。 –

回答

5

您需要使用連接:didReceiveResponse委託方法來檢查http響應代碼。像下面的東西會檢查以確保你得到了200迴應,這取決於你的服務器,如果文件不存在,我希望狀態碼是404。

- (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
    //make sure we have a 2xx reponse code 
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; 

    if ([httpResponse statusCode]/100 == 2){ 
     NSLog(@"file exists"); 
    } else { 
     NSLog(@"file does not exist"); 
    } 
} 
+0

謝謝安德魯。這工作。 – kzia

+0

後續問題:上述代碼有效,但委託方法異步完成。如果文件存在,如何可靠地檢查主程序(不在委託中)? – kzia

+1

你需要使用sendSynchronousRequest:returningResponse:error: NSURLConnection方法發送一個同步請求。如果你走這條路線,你可能只需使用returningResponse變量來檢查返回碼,我不相信委託方法被同步請求調用 –

相關問題