网络编程归纳总结五阶段

网络编程归纳总结五阶段

文件上传
监视post登录的请求头(get请求头是没有此项的)

Content-Type: application/x-www-form-urlencoded
演示上传文件,监视请求
Content-Type:multipart/form-data; boundary=—-WebKitFormBoundaryqVIdsHKTeI0Mcuhb
请求头中Content-Type的作用
请求头中的Content-Type告诉服务器,客户端post过去的数据的样子
application/x-www-form-urlencoded
此值是告诉服务器post过去的数据的样式是 键=值&键=值 的形式(和URL传参的样式一致)
默认使用此值
multipart/form-data; boundary=—-WebKitFormBoundaryqVIdsHKTeI0Mcuhb
键=值的形式无法上传文件,所以上传文件的时候使用的是form-data
此形式中前半部分是协议中固定的multipart/form-data; boundary=–
后面的内容是一个随机内容,不同的浏览器生成的是不一样的,我们也可以自己指定

上传文件的第三方框架

AFN ,ASI(过时)

自己上传文件

UGC 用户生成内容
上传文件,发送请求的时候要设置请求NSMutableURLRequest的以下属性

a.  request.HTTPMethod = @"post";
b.  request.HTTPBody
c.  Content-Type
 NSString *type = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
    [request setValue:type forHTTPHeaderField:@"Content-Type"];
请求体

请求体中各项的含义
——WebKitFormBoundaryuWw18YzUxr2ygEJi
Content-Disposition: form-data; name=”userfile”; filename=”03.JPG”
Content-Type: image/jpeg

二进制数据
——WebKitFormBoundaryuWw18YzUxr2ygEJi–
分隔符 ——WebKitFormBoundaryuWw18YzUxr2ygEJi
name 表单的name属性值
filename 传递给服务器的文件名
Content-Type 告诉服务器传递的文件类型
text/plain image/jpeg image/jpg image/png application/octet-stream 等
二进制数据 要上传文件的NSData
——WebKitFormBoundaryuWw18YzUxr2ygEJi–

上传单个文件
1.发送异步请求
#define boundary @"hahahhahawa"
- (void)sendFile:(NSString *)fieldName fileName:(NSString *)fileName data:(NSData *)fileData{
    //1 创建请求
    NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/upload/upload.php"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    //设置请求动作
    request.HTTPMethod = @"post";
    request.HTTPBody = [self makeBody:fieldName fileName:fileName data:fileData];
    //设置请求的content-typeform-data,才能上传文件
    NSString *type = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
    [request setValue:type forHTTPHeaderField:@"Content-Type"];

    //2 发送异步请求
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

        if (data) {
            id result = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];
            NSLog(@"%@",result);
            return;
        }
        NSLog(@"%@",connectionError);
    }];
}
2.生成formData
//搞个body
- (NSData *)makeBody:(NSString *)fieldName fileName:(NSString *)fileName data:(NSData *)fileData{
    NSMutableData *data = [NSMutableData data];
    NSMutableString *str = [NSMutableString string];
    [str appendFormat:@"--%@\r\n",boundary];
    [str appendFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\r\n",fieldName,fileName];
    [str appendString:@"Content-Type: image/png\r\n\r\n"];

    //把字符串转换成二进制数据,添加到data中
    [data appendData:[str dataUsingEncoding:NSUTF8StringEncoding]];
    //要上传的文件
    [data appendData:fileData];

    NSString *tail = [NSString stringWithFormat:@"\r\n--%@--",boundary];
    [data appendData:[tail dataUsingEncoding:NSUTF8StringEncoding]];
    return [data copy];
}
3.加载文件测试
//测试
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

    NSString *path = [[NSBundle mainBundle] pathForResource:@"xx.png" ofType:nil];
    NSData *data = [NSData dataWithContentsOfFile:path];
    [self sendFile:@"userfile" fileName:@"xx.png" data:data];
}
RESTful

OC使用RESTful 使用RestKit框架

什么是RESTful

使用不同的HTTP访问方法,请求一个URL,表达不同的语义
主要由服务器端开发,我们使用
RESTful风格让url的可读性更好

示例

http://www.ooxx.com/video/cls
GET 获取服务器上 cls的所有视频
POST 新增服务器上 cls的视频
PUT 修改服务器上 cls的视频
DELETE 删除服务器上 cls的视频
http://www.ooxx.com/video/cls/c
http://www.ooxx.com/video/cls

最近才开始往github上放东西 在公司写的又不能放= = 大家姑且看看吧

github地址: https://github.com/FuThD

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值