首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
飞猴阿新
北京石油化工学院 iOS开发
发布于北京
关注
已关注
取消关注
@小生好怕怕:
iOS_网络编程
网络编程中有以下几种方式向服务器进行提交数据: IOS同步请求、异步请求、GET请求、POST请求 1、同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作, 2、异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然可以对UI进行操作,程序可以继续运行 3、GET请求,将参数直接写在访问路径上。操作简单,不过容易被外界看到,安全性不高,地址最多255字节; 4、POST请求,将参数放到body里面。POST请求操作相对复杂,需要将参数和地址分开,不过安全性高,参数放在body里面,不易被捕获。 接下来借用代码来演示四种请求方式的实现: 第一种是使用:GET请求方式 1 -(void)loginByGet 2 { 3 //1.创建NSURL对象,设计连接的地址 4 NSString *strURL =[NSString stringWithFormat:@"http://127.0.0.1/userManager/login.php?username=%@&password=%@",self.userNameTextField.text,self.passwordTextField.text]; 5 NSURL *url = [NSURL URLWithString:strURL]; 6 7 //2.创建NSURLRequest请求对象 8 NSURLRequest *request = [NSURLRequest requestWithURL:url]; 9 /**10 * NSURLReqest 如果是不可变的,则不可设置超时时间。11 */12 //3.创建NSURLConnection连接对象13 NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];14 15 //4.向服务器发送请求16 [connection start];17 } 第二种是使用:POST请求方式 1 -(void)loginByPost 2 { 3 //1.创建NSURL对象,设计连接的地址 4 NSString *strURL = @"http://127.0.0.1/userManager/login.php"; 5 NSURL *url = [NSURL URLWithString:strURL]; 6 7 //2.创建NSURLRequest请求对象 8 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 9 [request setTimeoutInterval:5.0];//设置连接超时的等待时间;10 [request setHTTPMethod:@"post"];//设置请求方式为POST 11 //设置post带的数据12 NSString *strBody = [NSString stringWithFormat:@"submit=1&username=%@&password=%@",self.userNameTextField.text,self.passwordTextField.text];13 NSData *dataBody = [strBody dataUsingEncoding:NSUTF8StringEncoding];14 //通过协议头进行携带数据15 [request setHTTPBody:dataBody];16 17 //3.创建NSURLConnection连接对象18 NSURLConnection *conn = [NSURLConnection connectionWithRequest:request delegate:self];19 20 //向服务器发送请求21 [conn start];22 23 } 第三种是使用:同步请求方式 1 -(void)loginByPost 2 { 3 //1.创建NSURL对象,设计连接的地址 4 NSString *strURL = @"http://127.0.0.1/userManager/login.php"; 5 NSURL *url = [NSURL URLWithString:strURL]; 6 //2.创建NSURLRequest请求对象 7 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 8 [request setTimeoutInterval:5.0];//超时时间 9 [request setHTTPMethod:@"post"];//设置使用post方式10 //设置post带的数据11 NSString *strBody = [NSString stringWithFormat:@"submit=1&username=%@&password=%@",self.userNameTextField.text,self.passwordTextField.text];12 NSData *dataBody = [strBody dataUsingEncoding:NSUTF8StringEncoding];13 //通过协议头进行携带数据14 [request setHTTPBody:dataBody];15 16 //3.创建NSURLConnection连接对象17 NSURLConnection *conn = [NSURLConnection connectionWithRequest:request delegate:self];18 //4.向服务器发送请求19 [conn start];20 21 //清理数据22 NSData *data = [@"" dataUsingEncoding:NSUTF8StringEncoding];23 [self.allDatas setData:data];24 25 } 第四种是使用:异步请求方式 1 -(void)asyncLogin 2 { 3 //1.创建NSURL对象,设置连接的地址 4 NSString *strURL = @"http://127.0.0.1//userManager/login.php"; 5 NSURL *url = [NSURL URLWithString:strURL]; 6 7 //2.创建NSURLRequest请求对象(POST) 8 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 9 //设置请求方式10 [request setHTTPMethod:@"POST"];11 //在异步请求方式中,通过协议体进行携带数据传送12 NSString *strBody = [NSString stringWithFormat:@"submit=1&username=%@&password=%@",self.userNameTextField.text,self.passwordTextField.text];13 NSData *data = [strBody dataUsingEncoding:NSUTF8StringEncoding];14 [request setHTTPBody:data];15 //3.创建异步请求16 //block将代码进行封装,作为一个参数加到这个方法中,当数据传输完成之后,才调用block进行输出。当调用block时,将接收到的服务器响应、数据,还有出错信息,传送到block中,进行判断输出。17 [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {18 if (connectionError) {19 NSLog(@"Error reason:%@",connectionError);20 }21 else22 {23 //设置编码24 unsigned long encoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);25 //将从服务器收到的数据进行输出26 NSString *request = [[NSString alloc]initWithData:data encoding:encoding];27 NSLog(@"%@",request);28 }29 }];30 } 在使用NSURLConnection连接对象时,还需要实现<NSURLConnectionDataDelegate>代理方法 1 #pragma mark - NSURLConnection代理方法 2 //收到服务器返回的数据,可能会执行很多次,因为数据如果很大的话,会进行分包发送 3 -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 4 { 5 //将所有数据段进行拼接,将新接收的数据段进行追加 6 [self.allDatas appendData:data]; 7 } 8 //连接过程中出错处理 9 -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error10 {11 NSLog(@"error reason:%@",error);12 }13 //数据接收完毕,做最后的数据处理14 -(void)connectionDidFinishLoading:(NSURLConnection *)connection15 {16 //当传输的文件中,如果含有汉字的,系统无法识别这种编码17 unsigned long encoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);18 //按照encoding这种编码方式,将接收到数据段进行输出19 NSString *request = [[NSString alloc]initWithData:self.allDatas encoding:encoding];20 NSLog(@"%@",request);21 } 在POST请求方式中,如果希望看到数据传输的进度,可以通过实现以下方法进行打印输出。 1 //以post方式传数据时返回数据传输的进度,仅限于以post方式2 -(void)connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite3 {4 NSLog(@"bytes:%ld,totalBytes:%ld,totalBytesExpected:%ld",bytesWritten,totalBytesWritten,totalBytesExpectedToWrite);5 } 知识点补充:GET请求和POST请求方式 GET GET的语义是获取指定URL上的资源 将数据按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,各个变量之间使用“&”连接 不安全,因为在传输过程中,数据被放在请求的URL中 传输的数据量小,这主要是因为受URL长度限制 POST POST的语意是对指定资源“追加/添加”数据 将数据放在数据体中,按照变量和值相对应的方式,传递到action所指向URL 所有数据对用户来说不可见 可以传输大量数据,上传文件只能使用Post 网络访问的四个步骤 第一步:确定地址——URL 第二步:建立请求 第三步:开始连接 等待网络处理中…… 第四步:连接完成,处理结果
点赞 0
评论 0
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
07-24 13:52
安徽大学 硬件开发
小鹏ai测评
有三个部分:性格测试,简历问题,专业问题性格测试60道比较简单简历问题主要是自我介绍和介绍一下实习的项目专业问题主要是自己的职业规划和对公司及岗位的理解还有一些比较简单的考察思维能力的问题
投递小鹏汽车等公司10个岗位
点赞
评论
收藏
分享
不愿透露姓名的神秘牛友
07-23 14:22
怼回去以后爽了
点赞
评论
收藏
分享
06-12 17:46
门头沟学院 Java
27届实习简历
27届学Java三个多月了,想找个实习,简历该怎么改啊(项目就只有苍穹外卖和黑马点评),求拷打
运营你豪哥:
来说重点: 1.项目前置,时间倒序。 2.项目描述强化结果与量化效果(STAR原则里的R)。 3.个人技能精炼,明确掌握程度,突出核心。 4.增加强有力开头的个人总结部分。 5.优化教育背景(成绩排名)、合并奖项与活动。
听劝,我这个简历该怎么改...
点赞
评论
收藏
分享
07-02 10:39
门头沟学院 Java
JAVA开发想找个实习这么难吗
鼠鼠是26届双非学院本,boss上打招呼都不读,要么就是已读不回,用应届生求职还好点 ,今天约了一个面试,但我朋友昨天面了,只能说确实是小厂,一坨 现在真的很焦虑了
Steven267:
说点真实的,都要秋招了,还没有实习,早干嘛去了,本来学历就差
,现在知道急了,而且你这个简历完全可以写成一页,劣势太大了,建议转测试
点赞
评论
收藏
分享
07-23 13:56
滴滴_运维开发工程师(准入职员工)
滴滴内推
薪资: 我是运营岗,本科生 150/d,工作时间是早10晚7,弹性打卡(但其实每天打卡四小时就算一天),午休 2 小时(不过中午休息区比较难抢) 交通: 我在东软职场,每天上下班有西二旗到公司往返的摆渡车,不同职场之间往来打车可以报销,21:00 下班回家也可以报销(但我从来没用过,没加过班) 福利: 开水畅饮,特定节假日有礼盒,公司经常会举办各种活动,参加会有小礼品和积分,积分可以在商城兑换物品。 吃饭: 午饭需要自己解决,每晚有 30 的餐补,可以去周边餐馆点餐,也可以在内部软件点餐,直接送到所在楼层茶水间 总体感觉在滴滴很舒服,工作强度不大,我所在的部门也没有太多dirty work ,...
滴滴公司福利 1114人发布
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
别害怕前端手写,真没想象的难
7928
2
...
大模型应用开发面经 (5年经验)
5230
3
...
2025 年了,万分推荐的前端学习路径!!!
3619
4
...
🍀双非鼠鼠上岸大厂攻略🍀
3345
5
...
先放弃找大厂的想法了
2568
6
...
扪心自问,你配ssp吗
1892
7
...
经典问题,保研还是就业😵
1514
8
...
虾皮提前批挂
1486
9
...
26双非秋招投递记录贴--长期更新
1423
10
...
实习都是CRUD怎么包装
1389
创作者周榜
更多
正在热议
更多
#
工作中哪个瞬间让你想离职
#
31911次浏览
237人参与
#
我对___祛魅了
#
2632次浏览
33人参与
#
中兴秋招
#
182959次浏览
2043人参与
#
和同事相处最忌讳的是__
#
2562次浏览
31人参与
#
打工人的精神状态
#
62740次浏览
1048人参与
#
如何快速融入团队?
#
1055次浏览
25人参与
#
机械人,你被简历秒挂的企业有哪些?
#
45656次浏览
295人参与
#
职场常用语录大全
#
4985次浏览
41人参与
#
机械人,秋招第一次笔试的企业是哪家?
#
42057次浏览
335人参与
#
在职场上,你最讨厌什么样的同事
#
17570次浏览
174人参与
#
担心入职之后被发现很菜怎么办
#
142379次浏览
822人参与
#
哪些公司校招卡第一学历
#
83673次浏览
360人参与
#
职场人,说说你的烦心事
#
12554次浏览
106人参与
#
软开人,秋招你打算投哪些公司呢
#
109790次浏览
991人参与
#
你觉得找工作该拿大厂还是小厂练手
#
196189次浏览
1752人参与
#
如果重来一次你还会读研吗
#
180772次浏览
1815人参与
#
秋招想进国企该如何准备
#
77472次浏览
427人参与
#
机械人晒出你的简历
#
87326次浏览
715人参与
#
工作一周年分享
#
32364次浏览
193人参与
#
金融财会交流会
#
112921次浏览
386人参与
#
找工作中的意难平
#
784773次浏览
6125人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务