在開發應用程式的時候,特別是當今網路特別充足和重要的時候,網路應用和案頭應用史無前例的整合起來,其界限也越來越模糊。所以網路應用可以向案頭應用開放API,然後案頭應用去調用,這樣可以方便的維護一份代碼,並且可以push更新到使用者手裡。
而在設計的時候,通常情況下都是用戶端發送相應的Http請求,並包含某些內容,發送完畢之後,等待伺服器端的響應。而在伺服器端,得到請求的內容並產生相應的結果返回即可。雖然這個過程很好理解,很簡單,但是在Mac和iPhone開發上,還是有點麻煩,而且國內資料又少,所以這裡我寫一下如何?發送HttpRequest請求,方便後面的同學。
這段代碼可以適用與Mac OS X和iPhone應用。
介面我就用Mac的案頭應用做,因為簡單,效果一樣,介面可以做成如下模樣,如何串連就各位自己去串連了,我前面的文章說的很明白了。
當我們按下按鈕的時候,就去擷取相應的網站/伺服器的返回的請求。調用方法如下。
- (IBAction)buttonClicked:(id)sender
{
NSString *receive = [RequestSender sendRequest:@"http://wt.jguoer.com"];
textbox.title = receive;
NSLog(@"Clicked");
}
RequestSender是我寫的一個類,這個類就是用於發送Http請求的,具體代碼如下。
#import <Cocoa/Cocoa.h>
@interface RequestSender : NSObject {
}
+ (NSString*)sendRequest:(NSString*)url;
@end
實現代碼如下所示,我已經寫了詳細的注釋了,所以我就不需要再多說什麼了。
+ (NSString*)sendRequest:(NSString*)url
{
//準備發送httprequest
NSString *urlString = url;
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"GET"];
//設定http頭
NSString *contentType = [NSString stringWithFormat:@"text/xml"];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];
//建立http內容
//NSMutableData *postBody = [NSMutableData data];
//[postBody appendData:[[NSString stringWithFormat:@"<xml>"] dataUsingEncoding:NSUTF8StringEncoding]];
//[postBody appendData:[[NSString stringWithFormat:@"<your xml format code here/>"] //dataUsingEncoding:NSUTF8StringEncoding]];
//[postBody appendData:[[NSString stringWithFormat:@"</xml>"] dataUsingEncoding:NSUTF8StringEncoding]];
//設定發送內容
//[request setHTTPBody:postBody];
//擷取響應
NSHTTPURLResponse* urlResponse = nil;
NSError *error = [[NSError alloc] init];
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error];
NSString *result = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
//返回的http狀態
NSLog(@"Response Code: %d", [urlResponse statusCode]);
//擷取返回的內容
if ([urlResponse statusCode] >= 200 && [urlResponse statusCode] < 300)
{
NSLog(@"Response: %@", result);
return result;
//執行你想要的內容,代碼可以寫在這裡
}
return @"Return value";
}