在开发应用程序的时候,特别是当今网络特别充足和重要的时候,网络应用和桌面应用史无前例的整合起来,其界限也越来越模糊。所以网络应用可以向桌面应用开放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");
}
{
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
@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/>"]
{
//准备发送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";
}
//[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";
}