首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
10-10 12:16
重庆理工大学 行政经理
腾讯内推腾讯面经
腾讯-校招内推 热乎乎的内推码:EUTPZZRV 腾讯重视员工的个人成长和工作满意度,提供丰富的职业发展机会和支持。 走上面链接投递就是我内推,全程push 杜绝石沉大海 分享一些面经: 第一轮技术面 闭包作用及实际应用场景 HTTP/1.1、HTTP/2、HTTP/3的核心差异 实现红绿灯控制效果(异步时序逻辑) React Hooks的设计动机与类组件对比 浏览器事件代理原理及实际应用 手写Promise核心逻辑(包含resolve/reject) 数组去重与高频字符统计算法 Web安全防护措施(XSS、CSRF) 浏览器渲染流程与重排/重绘优化 跨域解决方案(JSONP、CORS、代...
点赞
评论
收藏
分享
10-10 01:21
哈尔滨工业大学 Java
[10.9] 兴业数金 笔试
客观题闹麻了,单选多选考了一堆安全方向的,直接乱答编程题原题在 洛谷。二分法找到木材长度即可,笔者用了闭区间二分,首先降序排序,接着初始化左右界为 nums[k-1] 和 nums[0],注意特判 k-1 越界情况。 class Solution: def maxLength(self, nums: List[int], k: int) -> int: # write code here nums.sort(reverse=True) L = nums[min(k, len(nums)) - 1] R = nums[0] def could_cut(m): cut = 0 for num...
投递兴业数金等公司10个岗位
点赞
评论
收藏
分享
08-28 20:56
南京邮电大学 Java
入职第一个月最新发明
写完愣了两分钟开始笑
否极泰来来来来:
解约赔多少
点赞
评论
收藏
分享
09-01 11:31
门头沟学院 Java
太支持了
新的招聘模式 很难不支持
buul:
七牛云的吧,感觉想法是好的,但是大家没那么多时间弄他这个啊。。。不知道的还以为他是顶尖大厂呢还搞比赛抢hc,只能说应试者的痛苦考察方是无法理解的,他们只会想一出是一出
点赞
评论
收藏
分享
10-09 13:31
库洛游戏_系统策划(准入职员工)
库洛游戏内推-库洛游戏内推码
笔试&面试经验【笔试经验)技术岗:涉及专业技能考核,可能包含编程、算法等题目。美术岗:可能需要提交作品集或参加现场绘画测试。▶非技术岗:可能包含逻辑推理、案例分析、市场营销策略等题目。面试经验)库洛游戏的面试流程通常分为三轮:一面(初试)、二面(复试)、HR面(终试)以下是每一轮面试的经验分享:【一面】自我介绍:自我介绍时要简洁明了,包括自己的基本信息、教育背景、技能特长,以及对库洛游戏和该职位的兴趣所在。强调与游戏行业或应聘职位相关的技能和经验。技术/专业能力考察:一面会测试你的专业知识和技能。比如,游戏开发岗位可能会问到编程技能、对游戏引擎的理解。游戏测试岗位可能会问到测试方法、b...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
HR面,到底该准备些啥(附核心问题回答思路)
1.8W
2
...
懂车帝二面 2025.10.11 1h32min
4559
3
...
除了卷大厂,还有其他出路吗。。。
4559
4
...
双非秋招timeline供参考(腾讯字节阿里快手美团)
3316
5
...
小红书一面面经
3071
6
...
牛牛求救🆘,不敢梭哈后端第二技能点怎么搭配
3038
7
...
10.12pdd笔试大鸭蛋
2474
8
...
第一次去北京那么远的地方实习,心里总是不安,大家会有这种感觉吗?
2344
9
...
10.12 拼多多技术岗笔试 第二题 求教
2267
10
...
华为10月10号考的手写LSTM被压中了
2069
创作者周榜
更多
正在热议
更多
#
面包vs爱情,怎么选?
#
7949次浏览
89人参与
#
职场新人体验
#
83964次浏览
595人参与
#
爱玛科技集团求职进展汇总
#
27231次浏览
196人参与
#
实习生如何通过转正
#
104260次浏览
1394人参与
#
tplink提前批进度交流
#
207112次浏览
1506人参与
#
安克创新求职进展汇总
#
53983次浏览
529人参与
#
深信服秋招来了
#
279755次浏览
2915人参与
#
Tplink求职进展汇总
#
180446次浏览
912人参与
#
秋招结束之后的日子
#
86308次浏览
976人参与
#
面试被问“你的缺点是什么?”怎么答
#
154775次浏览
2149人参与
#
贝壳求职进展汇总
#
34612次浏览
184人参与
#
硬件/芯片公司岗位评价
#
8378次浏览
28人参与
#
Offer比较,你最看重什么?
#
215300次浏览
1389人参与
#
互联网公司爆料
#
144737次浏览
708人参与
#
招银网络求职进展汇总
#
168432次浏览
992人参与
#
联影求职进展汇总
#
43106次浏览
284人参与
#
华为海思工作体验
#
29122次浏览
120人参与
#
新凯来求职进展汇总
#
49800次浏览
126人参与
#
材料进Fab厂真的劝退吗?
#
56162次浏览
204人参与
#
五一之后,实习真的很难找吗?
#
88082次浏览
556人参与
#
应届生,你找到工作了吗
#
69077次浏览
459人参与
#
总结:哪家公司最喜欢泡池子
#
144117次浏览
520人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务