zoukankan      html  css  js  c++  java
  • IOS开发 网络详解(三)--- Http请求报文和响应报文(Get和Post)

    HTTP请求报文由请求行,请求头,空格和请求数据构成。

    1.请求行由请求方法 空格 请求url 空格 版本 组成

    2.请求头由关键字/值组成

      常用的由user-Agent:浏览器类型

                    accept:客户端能识别的类型列表

                    host:主机名

    3.空格:区分不同的部分

    4.只用post才有:最常对应的请求头尾content-length,content-type

    5.get请求实例

    //请求首行
    GET /hello/index.jsp HTTP/1.1
    //请求头信息,因为GET请求没有正文
    Host: localhost
    User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: zh-cn,zh;q=0.5
    Accept-Encoding: gzip, deflate
    Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7
    Connection: keep-alive
    Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE36D98
    //空行
    //因为GET没有正文,所以下面为空

    6.post请求实例

    // 请求首行
    POST /hello/index.jsp HTTP/1.1
    //请求头信息
    Host: localhost
    User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: zh-cn,zh;q=0.5
    Accept-Encoding: gzip, deflate
    Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7
    Connection: keep-alive
    Referer: http://localhost/hello/index.jsp
    Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE36D98
    Content-Type: application/x-www-form-urlencoded 
    Content-Length: 14 
    // 这里是空行
    //POST有请求正文
    username=hello

     7.URLConnection实现文件上传(注意请求头)

    好了先看看这个图,上传文件和普通的POST请求不一样,它多了一些这个,然而这里就有是需要我们拼接的内容,分两部分
    
    上面的Content-Type是在我们的请求头里面的
    
    下面的那些写红色字的就是我们所请求 需要拼接的
    
    至于换多少行,我也一一的拼接出来了,你们拼接的话可以跟着下面的图一步一步拼接.



    //1、确定URL
        NSURL *url = [NSURL URLWithString:@"http://192.168.1.0:8080/upload"];
    
        //2、确定请求
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        /******************************************************************/
        //                          设置请求头
        [request setValue:@"multipart/form-data; boundary=----WebKitFormBoundaryUFNaH6losNxu4xDq" forHTTPHeaderField:@"Content-Type"];
    
        /******************************************************************/
        //                          设置请求体
        // 设置请求体
        // 给请求体加入固定格式数据  这里也是使用的也是可变的,因为多嘛
        NSMutableData *data = [NSMutableData data];
        /******************************************************************/
        //                       开始标记
        [data appendData:[@"------WebKitFormBoundaryUFNaH6losNxu4xDq" dataUsingEncoding:NSUTF8StringEncoding]];
        [data appendData:[@"
    " dataUsingEncoding:NSUTF8StringEncoding]];
        [data appendData:[@"Content-Disposition: form-data; name="file"; filename="Liiii.png"" dataUsingEncoding:NSUTF8StringEncoding]];
        [data appendData:[@"
    " dataUsingEncoding:NSUTF8StringEncoding]];
        [data appendData:[@"Content-Type: image/png" dataUsingEncoding:NSUTF8StringEncoding]];
        [data appendData:[@"
    " dataUsingEncoding:NSUTF8StringEncoding]];
        [data appendData:[@"
    " dataUsingEncoding:NSUTF8StringEncoding]];
        /******************************************************************/
        //                      上传文件参数
        //图片数据  并且转换为Data
        UIImage *image = [UIImage imageNamed:@"Liiii"];
        NSData *imagedata = UIImagePNGRepresentation(image);
        [data appendData:imagedata];
        [data appendData:[@"
    " dataUsingEncoding:NSUTF8StringEncoding]];
        [data appendData:[@"
    " dataUsingEncoding:NSUTF8StringEncoding]];
        /******************************************************************/
        //                       非文件参数
        [data appendData:[@"------WebKitFormBoundaryUFNaH6losNxu4xDq" dataUsingEncoding:NSUTF8StringEncoding]];
        [data appendData:[@"
    " dataUsingEncoding:NSUTF8StringEncoding]];
        [data appendData:[@"Content-Disposition: form-data; name="username"" dataUsingEncoding:NSUTF8StringEncoding]];
        [data appendData:[@"
    " dataUsingEncoding:NSUTF8StringEncoding]];
        [data appendData:[@"
    " dataUsingEncoding:NSUTF8StringEncoding]];
        [data appendData:[@"LitterL" dataUsingEncoding:NSUTF8StringEncoding]];
        [data appendData:[@"
    " dataUsingEncoding:NSUTF8StringEncoding]];
        /******************************************************************/
        //                      添加结束标记
        [data appendData:[@"------WebKitFormBoundaryUFNaH6losNxu4xDq--" dataUsingEncoding:NSUTF8StringEncoding]];
        [data appendData:[@"
    " dataUsingEncoding:NSUTF8StringEncoding]];
        /******************************************************************/
    
        //请求方式
        request.HTTPMethod = @"POST";
        //请求体
        request.HTTPBody = data;
    
        //3、发送请求
        [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
            NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
        }];
    
    
    
  • 相关阅读:
    Elasticsearch 支持拼音自动补全
    laravel自动补全链接
    laravel的服务容器(药箱)、服务提供者(小盒子)、Facades(更方便用药),方便大家透彻理解
    php static静态属性和静态方法
    php面向对象的构造方法与析构方法
    MySQL事务-ROLLBACK,COMMIT用法详解
    php 事务处理transaction
    Python:初步学习Python
    iOS:自己写的一个星级评价的小Demo
    iOS:枚举enum的使用
  • 原文地址:https://www.cnblogs.com/guchengfengyun/p/8095556.html
Copyright © 2011-2022 走看看