博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

[转一篇]Mac开发/iPhone开发 - 发送HttpRequest请求

Posted on 2010-09-17 00:54  BradyChen  阅读(3121)  评论(0编辑  收藏  举报

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