Tôi đang viết một chương trình trong Mục tiêu-C và tôi cần thực hiện yêu cầu web tới máy chủ web, nhưng không đồng bộ và tôi khá mới trên mac, tôi rất giỏi công nghệ cửa sổ, nhưng Tôi cần phải biết rằng nếu tôi sử dụng NSOperation (giới thiệu trong 10.5, tôi giả định rằng nó sẽ không chạy trong 10.4 MAC?), Hoặc nếu nó đã được thực hiện như vậy mà nó sử dụng luồng hệ thống mà sẽ có sẵn trên 10.4? Hoặc tôi nên tạo một chủ đề mới và tạo một runloop mới, cũng làm thế nào để sử dụng cookie, vv, nếu có ai có thể cho tôi một ví dụ nhỏ, đó sẽ là một sự trợ giúp tuyệt vời. Tôi muốn mẫu này chạy trên mac 10.4 quá nếu có thể.Yêu cầu web không đồng bộ mục tiêu-C với cookie
Trả lời
Có một ví dụ điển hình của việc sử dụng NSURLRequest và NSHTTPCookies để làm một ví dụ ứng dụng web đầy đủ các cách đăng nhập vào một trang web, lưu trữ cookie SessionID và gửi lại nó trong các yêu cầu trong tương lai.
By 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]);
Đối với các yêu cầu không đồng bộ, bạn cần sử dụng NSURLConnection
.
Đối với cookie, hãy xem NSHTTPCookie
và NSHTTPCookieStorage
.
UPDATE:
Đoạn code dưới đây là có thật, mã làm việc kể từ một trong những ứng dụng của tôi. responseData
được định nghĩa là NSMutableData*
trong giao diện lớp học.
- (void)load {
NSURL *myURL = [NSURL URLWithString:@"http://stackoverflow.com/"];
NSURLRequest *request = [NSURLRequest requestWithURL:myURL
cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
timeoutInterval:60];
[[NSURLConnection alloc] initWithRequest:request delegate:self];
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
responseData = [[NSMutableData alloc] init];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[responseData appendData:data];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
[responseData release];
[connection release];
// Show error message
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
// Use responseData
[responseData release];
[connection release];
}
@Akash: bạn đã thử kết nối NSURLConnection's connectionWithRequest: delegate: method? Và tôi xin lỗi nhưng tôi không thấy đề cập đến NSURLConnection hoặc NSHTTPCookie trong câu hỏi của bạn. Tin tôi đi, mọi thứ bạn cần đều nằm trong các liên kết tôi đã đưa ra. –
Tôi đã sử dụng nó, nó không hoạt động vì vậy tôi nghĩ rằng phải có một số cách khác để làm yêu cầu không đồng bộ như không có bất kỳ mã mẫu để làm điều đó. Đây là mã tôi đã thử .. http://stackoverflow.com/questions/706355/whats-wrong-on-following-urlconnection –
@Akash: NSURLConnection là cách dễ nhất. Tôi sẽ gửi mã mẫu. –
Tôi có thể lấy cookie trong theo cách như vậy:
NSArray* arr = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:[NSURL URLWithString: @"http://google.com" ]];
Cái này hoạt động tốt cho yêu cầu không đồng bộ là tốt.
- 1. Yêu cầu đồng bộ NSURLConnection từ yêu cầu đồng bộ so với yêu cầu không đồng bộ
- 2. Số lượng ajax đồng bộ, không đồng bộ yêu cầu
- 3. Yêu cầu đồng bộ với Websockets
- 4. Ví dụ yêu cầu không đồng bộ
- 5. nsurlconnection yêu cầu không đồng bộ
- 6. Cách thực hiện đa luồng với yêu cầu web không đồng bộ
- 7. Đồng bộ hóa ba yêu cầu ajax
- 8. Yêu cầu đồng bộ NSURLConnection trên https
- 9. Gọi không đồng bộ - Yêu cầu EndInvoke phải không?
- 10. Đang đợi nhiều yêu cầu POST không đồng bộ
- 11. chế biến đồng thời/Các yêu cầu không đồng bộ với Python BaseHTTPServer
- 12. Thực hiện nhiều yêu cầu HTTP không đồng bộ
- 13. cách gửi Yêu cầu URL Không đồng bộ?
- 14. Các yêu cầu HTTP không đồng bộ trong PHP
- 15. Yêu cầu url không đồng bộ bên trong dispatch_async
- 16. Yêu cầu web không đồng bộ F #, xử lý ngoại lệ
- 17. cách bật yêu cầu chế độ không đồng bộ?
- 18. yêu cầu HTTP không đồng bộ trong java
- 19. Đặt cookie cho các yêu cầu UIWebView
- 20. Ví dụ yêu cầu HTTP đồng bộ của iPad/mục tiêu C?
- 21. API cơ sở dữ liệu HTML5: Yêu cầu đồng bộ
- 22. Thực hiện yêu cầu đăng bài HttpClient không đồng bộ với dữ liệu từ FormCollection
- 23. Ý kiến về các yêu cầu đồng bộ trong nhân viên web
- 24. Mọi yêu cầu web có gửi cookie của trình duyệt không?
- 25. Kết nối mô hình yêu cầu/phản hồi http với hàng đợi không đồng bộ
- 26. iPhone sử dụng mutexes với URL không đồng bộ yêu cầu
- 27. Lỗi mô-đun không đồng bộ với các yêu cầu API song song
- 28. Yêu cầu FB không đồng bộ với khối trong vấn đề chuỗi riêng lẻ
- 29. IIS trì hoãn rất nhiều giữa mỗi phản hồi với các yêu cầu không đồng bộ
- 30. Truyền cookie theo yêu cầu spec
cảm ơn rất nhiều ở đây! – Hamy
Làm thế nào là không đồng bộ? –
Cảm ơn bạn đã trả lời, nhưng tôi có một câu hỏi, bạn đã chỉ định các URL khác nhau, ví dụ như URL đầu tiên bạn cung cấp [URL này] (http: //temp/gomh/authenticate.py? SetCookie = 1) và thứ hai một http: // temp và cứ thế. Làm cách nào để biết URL của cookie, vì dịch vụ web mà tôi đang sử dụng trong ứng dụng của tôi không cung cấp thông tin này? – Hamid