iOS- 网络开发GET请求和POST请求实现ip地址来源查询
2013-12-27 10:16
766 查看
一、Get请求与Post请求的区别
1、Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求
2、Get是获取信息,而不是修改信息,类似数据库查询功能一样,数据不会被修改
3、Get请求的参数会跟在url后进行传递,请求的数据会附在URL之后,以?分割URL和传输数据,参数之间以&相连,%XX中的XX为该符号以16进制表示的ASCII,如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密。
4、Get传输的数据有大小限制,因为GET是通过URL提交数据,那么GET可提交的数据量就跟URL的长度有直接关系了,不同的浏览器对URL的长度的限制是不同的。
5、GET请求的数据会被浏览器缓存起来,用户名和密码将明文出现在URL上,其他人可以查到历史浏览记录,数据不太安全。
Post请求则作为http消息的实际内容发送给web服务器,数据放置在HTML Header内提交,Post没有限制提交的数据。
6、Post比Get安全,当数据是中文或者不敏感的数据,则用get,因为使用get,参数会显示在地址,对于敏感数据和不是中文字符的数据,则用POST,POST表示可能修改变服务器上的资源的请求
二、用GET方法和POST方法,实现应用查询ip地址的来源,效果图如下:
三、实现过程(本文中声称的文件均以We为前缀)
1、所需控件有4个label,其中一个label作为输出口;一个textField,作为ip地址的输入框;一个UIButton,作为动作响应按钮,关联到 WeViewController.h 中
#import <UIKit/UIKit.h>
@interface WeViewController :
UIViewController<NSURLConnectionDataDelegate>
{
//把接收到的数据存储到可变长度的字符串中
NSMutableString *_pMutableStr;
}
@property (retain,
nonatomic) IBOutlet
UITextField *pTextIP;
@property (retain,
nonatomic) IBOutlet
UILabel *pValueLabel;
- (IBAction)buttonPressed:(id)sender;
@end
2、WeViewController.m 中,其中get方法和post方法取一即可
- (IBAction)buttonPressed:(id)sender
{
/*//GET请求
//获取当前textField内的ip地址
NSString *pStr = self.pTextIP.text;
//将其拼接成字符串
NSString *strURL = [@"http://webservice.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx/getCountryCityByIp?theIpAddress="
stringByAppendingString:pStr];
//转换为URL
NSURL *pURL = [NSURL URLWithString:strURL];
//创建请求
NSURLRequest *pRequest = [NSURLRequest requestWithURL:pURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];
//向服务器发起请求
[NSURLConnection connectionWithRequest:pRequest delegate:self];
*/
//POST
//与Get请求的第一个区别点(不带参数,参数附件在body体里)
NSString *postStr =
@"http://webservice.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx/getCountryCityByIp";
//转换为URL
NSURL *postURL = [NSURL
URLWithString:postStr];
//第二个区别点(请求为NSMutableURLRequest)
NSMutableURLRequest *postRequest = [NSMutableURLRequest
requestWithURL:postURL cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60];
//将参数做成一个字符串
NSString *post1 = [NSString
stringWithFormat:@"theIpAddress=%@",self.pTextIP.text];
//转换为NSData
NSData *postData = [post1
dataUsingEncoding:NSUTF8StringEncoding];
//第三个区别点(将参数作为Body体)
[postRequest
setHTTPBody:postData];
//第四点(必须手动声明当前的请求方式为POST)
[postRequest
setHTTPMethod:@"POST"];
//向服务器发送请求
[NSURLConnection
connectionWithRequest:postRequest delegate:self];
}
3、委托中方法实现
#pragma mark------URL delegate----
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse
*)response
{
NSLog(@"服务器响应");
_pMutableStr = [[NSMutableString
alloc]init];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData
*)data
{
NSLog(@"接收数据");
NSString *pStr = [[NSString
alloc]initWithData:data
encoding:NSUTF8StringEncoding];
[_pMutableStr
appendString:pStr];
NSLog(@"pStr = %@",_pMutableStr);
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@"接收数据成功");
NSMutableString *pValue = [[NSMutableString
alloc]init];
//获取字符串中的汉字部分
for(int i =
0; i < [_pMutableStr
length]; i++)
{
int a = [_pMutableStr
characterAtIndex:i];
if( a > 0x4e00 && a <
0x9fff)
{
[pValue appendString:[_pMutableStr
substringWithRange:NSMakeRange(i,
1)]];
}
}
NSLog(@"pValue = %@",pValue);
self.pValueLabel.text = pValue;
[pValue
release];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError
*)error
{
NSLog(@"Error = %@",[error
localizedDescription]);
}
//收回键盘的方法
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self.view
endEditing:YES];
}
4、到目前为止,功能已经实现,为了美化界面可以添加以下代码,为界面添加背景图
- (void)viewDidLoad
{
[super
viewDidLoad];
UIImageView *pImageView = [[UIImageView
alloc]initWithFrame:self.view.frame];
[pImageView
setImage:[UIImage
imageNamed:@"new"]];
[self.view
insertSubview:pImageView
atIndex:0];
}
注:web服务获取地址:http://www.webxml.com.cn/zh_cn/web_services.aspx
可以在上面找到xml的资源。
1、Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求
2、Get是获取信息,而不是修改信息,类似数据库查询功能一样,数据不会被修改
3、Get请求的参数会跟在url后进行传递,请求的数据会附在URL之后,以?分割URL和传输数据,参数之间以&相连,%XX中的XX为该符号以16进制表示的ASCII,如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密。
4、Get传输的数据有大小限制,因为GET是通过URL提交数据,那么GET可提交的数据量就跟URL的长度有直接关系了,不同的浏览器对URL的长度的限制是不同的。
5、GET请求的数据会被浏览器缓存起来,用户名和密码将明文出现在URL上,其他人可以查到历史浏览记录,数据不太安全。
Post请求则作为http消息的实际内容发送给web服务器,数据放置在HTML Header内提交,Post没有限制提交的数据。
6、Post比Get安全,当数据是中文或者不敏感的数据,则用get,因为使用get,参数会显示在地址,对于敏感数据和不是中文字符的数据,则用POST,POST表示可能修改变服务器上的资源的请求
二、用GET方法和POST方法,实现应用查询ip地址的来源,效果图如下:
三、实现过程(本文中声称的文件均以We为前缀)
1、所需控件有4个label,其中一个label作为输出口;一个textField,作为ip地址的输入框;一个UIButton,作为动作响应按钮,关联到 WeViewController.h 中
#import <UIKit/UIKit.h>
@interface WeViewController :
UIViewController<NSURLConnectionDataDelegate>
{
//把接收到的数据存储到可变长度的字符串中
NSMutableString *_pMutableStr;
}
@property (retain,
nonatomic) IBOutlet
UITextField *pTextIP;
@property (retain,
nonatomic) IBOutlet
UILabel *pValueLabel;
- (IBAction)buttonPressed:(id)sender;
@end
2、WeViewController.m 中,其中get方法和post方法取一即可
- (IBAction)buttonPressed:(id)sender
{
/*//GET请求
//获取当前textField内的ip地址
NSString *pStr = self.pTextIP.text;
//将其拼接成字符串
NSString *strURL = [@"http://webservice.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx/getCountryCityByIp?theIpAddress="
stringByAppendingString:pStr];
//转换为URL
NSURL *pURL = [NSURL URLWithString:strURL];
//创建请求
NSURLRequest *pRequest = [NSURLRequest requestWithURL:pURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];
//向服务器发起请求
[NSURLConnection connectionWithRequest:pRequest delegate:self];
*/
//POST
//与Get请求的第一个区别点(不带参数,参数附件在body体里)
NSString *postStr =
@"http://webservice.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx/getCountryCityByIp";
//转换为URL
NSURL *postURL = [NSURL
URLWithString:postStr];
//第二个区别点(请求为NSMutableURLRequest)
NSMutableURLRequest *postRequest = [NSMutableURLRequest
requestWithURL:postURL cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60];
//将参数做成一个字符串
NSString *post1 = [NSString
stringWithFormat:@"theIpAddress=%@",self.pTextIP.text];
//转换为NSData
NSData *postData = [post1
dataUsingEncoding:NSUTF8StringEncoding];
//第三个区别点(将参数作为Body体)
[postRequest
setHTTPBody:postData];
//第四点(必须手动声明当前的请求方式为POST)
[postRequest
setHTTPMethod:@"POST"];
//向服务器发送请求
[NSURLConnection
connectionWithRequest:postRequest delegate:self];
}
3、委托中方法实现
#pragma mark------URL delegate----
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse
*)response
{
NSLog(@"服务器响应");
_pMutableStr = [[NSMutableString
alloc]init];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData
*)data
{
NSLog(@"接收数据");
NSString *pStr = [[NSString
alloc]initWithData:data
encoding:NSUTF8StringEncoding];
[_pMutableStr
appendString:pStr];
NSLog(@"pStr = %@",_pMutableStr);
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@"接收数据成功");
NSMutableString *pValue = [[NSMutableString
alloc]init];
//获取字符串中的汉字部分
for(int i =
0; i < [_pMutableStr
length]; i++)
{
int a = [_pMutableStr
characterAtIndex:i];
if( a > 0x4e00 && a <
0x9fff)
{
[pValue appendString:[_pMutableStr
substringWithRange:NSMakeRange(i,
1)]];
}
}
NSLog(@"pValue = %@",pValue);
self.pValueLabel.text = pValue;
[pValue
release];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError
*)error
{
NSLog(@"Error = %@",[error
localizedDescription]);
}
//收回键盘的方法
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self.view
endEditing:YES];
}
4、到目前为止,功能已经实现,为了美化界面可以添加以下代码,为界面添加背景图
- (void)viewDidLoad
{
[super
viewDidLoad];
UIImageView *pImageView = [[UIImageView
alloc]initWithFrame:self.view.frame];
[pImageView
setImage:[UIImage
imageNamed:@"new"]];
[self.view
insertSubview:pImageView
atIndex:0];
}
注:web服务获取地址:http://www.webxml.com.cn/zh_cn/web_services.aspx
可以在上面找到xml的资源。
相关文章推荐
- iOS开发之网络编程篇二:Get,Post请求差异及用法
- iOS网络开发—POST请求和GET请求
- iOS网络编程开发GET请求和POST请求
- iOS 开发 中级:HTTP请求 GET POST 网络编程实现
- iOS 开发 中级:HTTP请求 GET POST 网络编程实现
- iOS开发:GET与POST接口网络请求以及对AFNetworking的二次封装
- iOS 开发 中级:HTTP请求 GET POST 网络编程实现
- 【iOS开发-网络】使用NSURLSessionDataTask发送get和post请求
- iOS开发网络学习七:NSURLSession的基本使用get和post请求
- iOS开发:网络请求之get、post同步异步请求
- iOS 开发 中级:HTTP请求 GET POST 网络编程实现
- ios开发网络学习:一:NSURLConnection发送GET,POST请求
- IOS开发—网络请求之GET/POST同步请求
- IOS开发之NSURL网络请求,同步异步,GET,POST
- 【iOS开发-93】GET和POST请求的实现步骤,MD5加密方法
- iOS 开发 中级:HTTP请求 GET POST 网络编程实现
- IOS开发 网络详解(三)--- Http请求报文和响应报文(Get和Post)
- IOS开发—网络请求之GET/POST异步请求(非代理)
- iOS开发那些事-iOS网络编程异步GET方法请求编程
- iOS开发网络篇—GET请求和POST请求