我正在Objective-C中编写一个程序,我需要将Web请求发送到Web服务器,但异步地,我在Mac上是相当新的,我非常擅长
windows技术,但是我需要知道,如果我使用NSOperation在10.5中,我假设它不会在10.4 MAC中运行),或者如果它被实现,使用将在10.4上可用的系统线程?
或者我应该创建一个新的线程,创建一个新的runloop,还有如何使用cookies等,如果有人可以给我一个小例子,那将是很大的帮助.我想要这个样本也可以在mac 10.4上运行.
解决方法
有一个很好的例子,使用NSURLRequest和NSHTTPCookies做一个完整的Web应用程序登录网站的例子,存储SessionID cookie,并在将来的请求中重新提交.
通过logix812:
NSHTTPURLResponse * response; NSError * error; NSMutableURLRequest * request; request = [[[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://temp/gomh/authenticate.py?setCookie=1"] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:60] autorelease]; [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; NSLog(@"RESPONSE HEADERS: \n%@",[response allHeaderFields]); // If you want to get all of the cookies: NSArray * all = [NSHTTPCookie cookiesWithResponseHeaderFields:[response allHeaderFields] forURL:[NSURL URLWithString:@"http://temp"]]; NSLog(@"How many Cookies: %d",all.count); // Store the cookies: // NSHTTPCookieStorage is a Singleton. [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookies:all forURL:[NSURL URLWithString:@"http://temp"] mainDocumentURL:nil]; // Now we can print all of the cookies we have: for (NSHTTPCookie *cookie in all) NSLog(@"Name: %@ : Value: %@,Expires: %@",cookie.name,cookie.value,cookie.expiresDate); // Now lets go back the other way. We want the server to know we have some cookies available: // this availableCookies array is going to be the same as the 'all' array above. We could // have just used the 'all' array,but this shows you how to get the cookies back from the singleton. NSArray * availableCookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:[NSURL URLWithString:@"http://temp"]]; NSDictionary * headers = [NSHTTPCookie requestHeaderFieldsWithCookies:availableCookies]; // we are just recycling the original request [request setAllHTTPHeaderFields:headers]; request.URL = [NSURL URLWithString:@"http://temp/gomh/authenticate.py"]; error = nil; response = nil; NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; NSLog(@"The server saw:\n%@",[[[NSString alloc] initWithData:data encoding: NSASCIIStringEncoding] autorelease]);