2010-01-13 30 views
34

Tôi muốn chuyển một ứng dụng python sử dụng cơ giới hóa cho iPhone. Ứng dụng này cần đăng nhập vào một trang web và sử dụng cookie của trang web để truy cập các trang khác trên trang web đó để nhận một số dữ liệu.Quản lý cookie HTTP trên iPhone

Với ứng dụng python của tôi, tôi đã sử dụng cơ giới hóa để quản lý cookie tự động. Có một cái gì đó tương tự cho Objective C đó là di động cho iPhone?

Cảm ơn bạn đã được trợ giúp.

+1

Ứng dụng A * Python *? 'WWW :: Mechanize' là một thư viện Perl. –

+3

Ngoài ra còn có một cổng python. http://wwwsearch.sourceforge.net/mechanize/ – dan

Trả lời

72

NSURLConnection cung cấp cho bạn quản lý cookie miễn phí. Từ số URL Loading System Programming Guide:

Hệ thống tải URL tự động gửi mọi cookie được lưu trữ thích hợp cho NSURLRequest. trừ khi yêu cầu chỉ định không gửi cookie. Tương tự như vậy, các cookie được trả lại trong NSURLResponse được chấp nhận theo chính sách chấp nhận cookie hiện tại.

+4

+1 Đây là câu trả lời đúng. –

+0

Làm cách nào để kiểm tra xem NSURLRequest có gửi cookie không? làm thế nào để đăng nhập vào console? – trillions

+3

Xem '- [NSHTTPCookieStorage cookiesForURL:]'. –

43

Bạn có thể sử dụng lớp NSURLConnection để thực hiện yêu cầu HTTP để đăng nhập trang web và truy xuất cookie. Để thực hiện một yêu cầu, chỉ cần tạo một thể hiện của NSURLConnection và gán một đối tượng delegate cho nó.

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/"]]; 
NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self]; 

Sau đó, triển khai phương thức đại biểu.

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
    NSHTTPURLResponse *HTTPResponse = (NSHTTPURLResponse *)response; 
    NSDictionary *fields = [HTTPResponse allHeaderFields]; 
    NSString *cookie = [fields valueForKey:@"Set-Cookie"]; // It is your cookie 
} 

Giữ lại hoặc sao chép chuỗi cookie. Khi bạn muốn thực hiện một yêu cầu khác, hãy thêm nó vào tiêu đề HTTP của cá thể NSURLRequest của bạn.

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/"]]; 
[request addValue:cookie forHTTPHeaderField:@"Cookie"]; 
+26

Bạn không cần phải làm điều này, NSURLConnection tự động lưu trữ và gửi cookie trừ khi bạn yêu cầu nó không rõ ràng. – benzado

+1

Mặc dù điều này không cần thiết phải khắc phục lỗi bị nghi ngờ trong iOS 4.2GM –

+0

Làm cách nào để phát hiện một Phiên đã hết hạn phía máy khách? Những gì gọi lại chúng ta nên mong đợi? Hoặc là nó chỉ là một vấn đề kiểm tra để xem nếu yêu cầu (với id phiên đó) đã thành công hay không? – Cole

0

@ câu trả lời của zonble chỉ hoạt động trong máy chủ cục bộ của tôi; Nếu máy chủ không chạy cục bộ, tiêu đề "Đặt cookie" bị thiếu trong trường NSDictionary * = [HTTPResponse allHeaderFields];

Cuối cùng tôi thấy giải pháp của @ benzado hoạt động tốt. Xem thêm: iphone nsurlconnection read cookies @Tal Bereznitskey câu trả lời.

Các vấn đề liên quan