iPhone: Thư viện request server HTTP/HTTPs

Trong lập trình iPhone, để kết nối server qua giao thức HTTP ta thường sử dụng lớp

NSURLConnection *connection;

NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:REQUEST_TIME_OUT] delegate:self];

Thư viện này được xây dựng sử dụng trên cơ sở của lớp NSURLConnection, có 2 lớp chính trong thư viện này:

HttpHandler – Lớp thực hiện request HTTP, lớp này thực hiện lần lượt một request mỗi lần đến server

HttpHandlerQueue – Lớp hàng đợi các request HTTP, lớp này thực hiện nhiều request đến server, các request sẽ được đưa vào hàng đợi và thực hiện lần lượt.

Ví dụ thực thi thư viện này, chúng sẽ sử dụng lớp HttpHandlerQueue ví lớp này tổng quát và bao hàm tất cả các hàm mà lớp HttpHandler cung cấp

#import “HttpHandlerQueue.h”

@interface HTTPLibViewController : UIViewController<HttpHandlerQueueDelegate> {

HttpHandlerQueue *handlerQueue;

}

Để sử dụng lớp HttpHandlerQueue lớp HTTPLibViewController phải thực thi Protocol  HttpHandlerQueueDelegate với các phương thức sau

(void) – httpHandlerQueue:didFinishDataRequestWithStatus:response:tag:

Hàm này sẽ được gọi khi request HTTP từ hàng đợi thực hiện xong với kiểu request là DATA_REQUEST.

(void) – httpHandlerQueue:didFinishStringRequestWithStatus:response:tag:

Hàm này sẽ được gọi khi request HTTP từ hàng đợi thực hiện xong với kiểu request là STRING_REQUEST.

(void) – httpHandlerQueue:didFinishImageRequestWithStatus:response:tag:

Hàm này sẽ được gọi khi request HTTP từ hàng đợi thực hiện xong với kiểu request là IMAGE_REQUEST.

Thực hiện gửi các request khác nhau

// Khởi tạo hàng đợi request

handlerQueue = [[HttpHandlerQueue alloc] initWithDelegate:self];

//Push 2 request STRING vào hàng đợi request, kết quả trả về từ request này là một đối tượng lớp  NSString.

[handlerQueue pushRequestWithUrl:@”http://overflowteam.com/bands2/server.php?cmd=GetStore&#8221; requestMethod:GET_METHOD requestType:STRING_REQUEST postContent:nil tag:1];

[handlerQueue pushRequestWithUrl:@”http://overflowteam.com/bands2/server.php?cmd=GetGeneralInfo&#8221; requestMethod:GET_METHOD requestType:STRING_REQUEST postContent:nil tag:2];

//Push 2 request IMAGE vào hàng đợi request, kết quả trả về từ request này là một đối tượng lớp  UIImage.

[handlerQueue pushRequestWithUrl:@”http://www.webmastergrade.com/wp-content/uploads/2009/12/Christmas-Gifts1.jpg&#8221; requestMethod:GET_METHOD requestType:IMAGE_REQUEST postContent:nil tag:1];

[handlerQueue pushRequestWithUrl:@”http://www.webmastergrade.com/wp-content/uploads/2009/12/Sweet-Christmas.jpg&#8221; requestMethod:GET_METHOD requestType:IMAGE_REQUEST postContent:nil tag:2];

//Push 2 request DATA vào hàng đợi request, kết quả trả về từ request này là một đối tượng lớp  NSData.

[handlerQueue pushRequestWithUrl:@”http://www.webmastergrade.com/wp-content/uploads/2009/12/Santa-Christmas-Gifts.jpg&#8221; requestMethod:GET_METHOD requestType:DATA_REQUEST postContent:nil tag:1];

[handlerQueue pushRequestWithUrl:@”http://www.webmastergrade.com/wp-content/uploads/2009/12/Red-Christmas-Bell.jpg&#8221; requestMethod:GET_METHOD requestType:DATA_REQUEST postContent:nil tag:2];

Các request này ta sử dụng phương thức GET, nếu muốn sử dụng theo phương thức POST ta sẽ thay tham số requestMethod là POST_METHOD.

Chúng ta để ý tham số tag ở mỗi request, tham số này sẽ sử dụng để xác định lại request để sử dụng khi có kết quả trả về

Kết quả trả về sẽ được xử lý trong 3 hàm thực thi từ Protocol HttpHandlerQueueDelegate

Ta ví dụ một đoạn xử lý

– (void) httpHandlerQueue:(HttpHandlerQueue *)queue didFinishImageRequestWithStatus: (HTTPRequestResult)status response:(UIImage *)image tag:(int)tag{

if (queue == handlerQueue) {

switch (status) {

case HTTPSuccess:

{

if (tag == 1) {

ivImg1.image = image;

} else if (tag == 2) {

ivImg2.image = image;

}

}

break;

case HTTPError:

{

NSLog(@”Error”);

}

break;

case HTTPTimeout:

{

NSLog(@”Timeout”);

}

break;

}

}

}

Thư viện được chia sẻ tại: mucdong-libs

  1. #1 by quyet on Tháng Một 22, 2013 - 09:34

    Rất hay cảm ơn bạn!

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

%d bloggers like this: