iOS开发 - AFNetworking网络请求

AFNetworking

什么是AFN 
全称是AFNetworking,是对NSURLConnection、NSURLSession的一层封装 
虽然运行效率没有ASI高,但是使用比ASI简单 
在iOS开发中,使用比较广泛

AFN的github地址 
https://github.com/AFNetworking/AFNetworking

AFHTTPRequestOperationManager

是AFN中最重要的对象之一 
封装了HTTP请求的常见处理 
GET\POST请求 
解析服务器的响应数据

创建

<code class="hljs fix has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-attribute" style="box-sizing: border-box;">AFHTTPRequestOperationManager *mgr </span>=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;"> [AFHTTPRequestOperationManager manager];</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

GET\POST请求

<code class="hljs erlang has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">//<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">GET</span>请求
<span class="hljs-pp" style="box-sizing: border-box;">- <span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">AFHTTPRequestOperation</span> *)</span>GET:<span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">NSString</span> *)</span>URLString
                     parameters:<span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(id)</span>parameters
                        success:<span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(void (^)</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">AFHTTPRequestOperation</span> *operation, id response<span class="hljs-variable" style="box-sizing: border-box;">Object</span>)</span>)success
                        failure:<span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(void (^)</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">AFHTTPRequestOperation</span> *operation, <span class="hljs-variable" style="box-sizing: border-box;">NSError</span> *error)</span>)failure

//POST请求
- <span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">AFHTTPRequestOperation</span> *)</span>POST:<span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">NSString</span> *)</span>URLString
                      parameters:<span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(id)</span>parameters
                         success:<span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(void (^)</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">AFHTTPRequestOperation</span> *operation, id response<span class="hljs-variable" style="box-sizing: border-box;">Object</span>)</span>)success
                         failure:<span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(void (^)</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">AFHTTPRequestOperation</span> *operation, <span class="hljs-variable" style="box-sizing: border-box;">NSError</span> *error)</span>)failure
</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li></ul>

文件上传

<code class="hljs erlang has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-pp" style="box-sizing: border-box;">- <span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">AFHTTPRequestOperation</span> *)</span>POST:<span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">NSString</span> *)</span>URLString
                      parameters:<span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(id)</span>parameters
       constructingBodyWithBlock:<span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(void (^)</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(id <<span class="hljs-variable" style="box-sizing: border-box;">AFMultipartFormData</span>> form<span class="hljs-variable" style="box-sizing: border-box;">Data</span>)</span>)block
                         success:<span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(void (^)</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">AFHTTPRequestOperation</span> *operation, id response<span class="hljs-variable" style="box-sizing: border-box;">Object</span>)</span>)success
                         failure:<span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(void (^)</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">AFHTTPRequestOperation</span> *operation, <span class="hljs-variable" style="box-sizing: border-box;">NSError</span> *error)</span>)failure
</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>

监控联网状态

<code class="hljs bash has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
[manager startMonitoring];

[manager <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">set</span>ReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
    NSLog(@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"%d"</span>, status);
}];

</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li></ul>

提示:要监控网络连接状态,必须要先调用单例的startMonitoring方法

1.AFHTTPRequestOperationManager 
* 对NSURLConnection的封装

2.AFHTTPSessionManager 
* 对NSURLSession的封装

对服务器返回数据的解析

<code class="hljs erlang-repl has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>.<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">AFN</span>可以自动对服务器返回的数据进行解析
* 默认将服务器返回的数据当做<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">JSON</span>来解析

<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>.设置对服务器返回数据的解析方式
<span class="hljs-prompt" style="color: rgb(0, 102, 102); box-sizing: border-box;">1> </span>当做是<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">JSON</span>来解析(默认做法)
* <span class="hljs-function_or_atom" style="box-sizing: border-box;">mgr</span>.<span class="hljs-function_or_atom" style="box-sizing: border-box;">responseSerializer</span> = [<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">AFJSONResponseSerializer</span> <span class="hljs-function_or_atom" style="box-sizing: border-box;">serializer</span>];
* <span class="hljs-function_or_atom" style="box-sizing: border-box;">responseObject</span>的类型是<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSDictionary</span>或者<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSArray</span>

<span class="hljs-prompt" style="color: rgb(0, 102, 102); box-sizing: border-box;">2> </span>当做是<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">XML</span>来解析
* <span class="hljs-function_or_atom" style="box-sizing: border-box;">mgr</span>.<span class="hljs-function_or_atom" style="box-sizing: border-box;">responseSerializer</span> = [<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">AFXMLParserResponseSerializer</span> <span class="hljs-function_or_atom" style="box-sizing: border-box;">serializer</span>];
* <span class="hljs-function_or_atom" style="box-sizing: border-box;">responseObject</span>的类型是<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSXMLParser</span>

<span class="hljs-prompt" style="color: rgb(0, 102, 102); box-sizing: border-box;">3> </span>直接返回<span class="hljs-function_or_atom" style="box-sizing: border-box;">data</span>
* 意思是:告诉<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">AFN</span>不要去解析服务器返回的数据,保持原来的<span class="hljs-function_or_atom" style="box-sizing: border-box;">data</span>即可
* <span class="hljs-function_or_atom" style="box-sizing: border-box;">mgr</span>.<span class="hljs-function_or_atom" style="box-sizing: border-box;">responseSerializer</span> = [<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">AFHTTPResponseSerializer</span> <span class="hljs-function_or_atom" style="box-sizing: border-box;">serializer</span>];

<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>.注意
* 服务器返回的数据一定要跟<span class="hljs-function_or_atom" style="box-sizing: border-box;">responseSerializer</span>对得上
<span class="hljs-prompt" style="color: rgb(0, 102, 102); box-sizing: border-box;">1> </span>服务器返回的是<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">JSON</span>数据
* <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">AFJSONResponseSerializer</span>
* <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">AFHTTPResponseSerializer</span>

<span class="hljs-prompt" style="color: rgb(0, 102, 102); box-sizing: border-box;">2> </span>服务器返回的是<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">XML</span>数据
* <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">AFXMLParserResponseSerializer</span>
* <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">AFHTTPResponseSerializer</span>

<span class="hljs-prompt" style="color: rgb(0, 102, 102); box-sizing: border-box;">3> </span>服务器返回的是其他数据
* <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">AFHTTPResponseSerializer</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li></ul>

AFNetworking网络请求实例

<code class="hljs java has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">#<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"AFNetworking.h"</span>

<span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@implementation</span> ViewController

- (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)viewDidLoad
{
    [<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">super</span> viewDidLoad];
    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Do any additional setup after loading the view, typically from a nib.</span>
}

- (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self postJSON];
}

- (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)getSession
{
    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// AFHTTPSessionManager 对 NSURLSession 的封装</span>
    AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager];
    [mgr GET:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">""</span> parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) {

    } failure:^(NSURLSessionDataTask *task, NSError *error) {

    }];
}

<span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
 *  利用AFN发送一个POST请求,服务器返回的JSON数据
 */</span>
- (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)postJSON
{
    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// AFHTTPRequestOperationManager 对 NSURLConnection的封装</span>

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 1.创建一个请求操作管理者</span>
    AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 2.请求参数</span>
    NSMutableDictionary *params = [NSMutableDictionary dictionary];
    params[@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"username"</span>] = @<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"哈哈哈"</span>;
    params[@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"pwd"</span>] = @<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"123"</span>;

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 3.发送一个GET请求</span>
    NSString *url = @<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"http://localhost:8080/MJServer/login"</span>;
    [mgr POST:url parameters:params
     success:^(AFHTTPRequestOperation *operation, id responseObject) {
         <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 请求成功的时候调用这个block</span>
         NSLog(@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"请求成功---%@"</span>, responseObject);
     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
         <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 请求失败的时候调用调用这个block</span>
         NSLog(@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"请求失败"</span>);
     }];
}

<span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
 *  利用AFN发送一个GET请求,服务器返回的JSON数据,让AFN直接返回data
 */</span>
- (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)getData
{
    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 1.创建一个请求操作管理者</span>
    AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 声明:不要对服务器返回的数据进行解析,直接返回data即可</span>
    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 如果是文件下载,肯定是用这个</span>
    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// responseObject的类型是NSData</span>
    mgr.responseSerializer = [AFHTTPResponseSerializer serializer];

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 2.请求参数</span>
    NSMutableDictionary *params = [NSMutableDictionary dictionary];
    params[@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"username"</span>] = @<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"哈哈哈"</span>;
    params[@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"pwd"</span>] = @<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"123"</span>;

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 3.发送一个GET请求</span>
    NSString *url = @<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"http://localhost:8080/MJServer/login"</span>;
    [mgr GET:url parameters:params
     success:^(AFHTTPRequestOperation *operation, id responseObject) {
         <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 请求成功的时候调用这个block</span>
         NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];

         NSLog(@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"%@"</span>, dict);
     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
         <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 请求失败的时候调用调用这个block</span>
         NSLog(@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"请求失败"</span>);
     }];
}

<span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
 *  利用AFN发送一个GET请求,服务器返回的XML数据
 */</span>
- (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)getXML
{
    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 1.创建一个请求操作管理者</span>
    AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 声明:等会服务器返回的是XML数据</span>
    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// responseObject的类型是NSXMLParser</span>
    mgr.responseSerializer = [AFXMLParserResponseSerializer serializer];

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 2.请求参数</span>
    NSMutableDictionary *params = [NSMutableDictionary dictionary];
    params[@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"username"</span>] = @<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"哈哈哈"</span>;
    params[@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"pwd"</span>] = @<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"123"</span>;
    params[@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"type"</span>] = @<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"XML"</span>;

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 3.发送一个GET请求</span>
    NSString *url = @<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"http://localhost:8080/MJServer/login"</span>;
    [mgr GET:url parameters:params
     success:^(AFHTTPRequestOperation *operation, id responseObject) {
         <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 请求成功的时候调用这个block</span>
         NSLog(@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"请求成功--%@"</span>, responseObject);
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//         responseObject.delegate = self;</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//         [responseObject parse];</span>
     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
         <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 请求失败的时候调用调用这个block</span>
         NSLog(@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"请求失败"</span>);
     }];
}

<span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
 *  利用AFN发送一个GET请求,服务器返回的JSON数据
 */</span>
- (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)getJSON
{
    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 1.创建一个请求操作管理者</span>
    AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 声明一下:服务器返回的是JSON数据</span>
    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//    mgr.responseSerializer = [AFJSONResponseSerializer serializer];</span>
    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// responseObject的类型是NSDictionary或者NSArray</span>

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 2.请求参数</span>
    NSMutableDictionary *params = [NSMutableDictionary dictionary];
    params[@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"username"</span>] = @<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"哈哈哈"</span>;
    params[@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"pwd"</span>] = @<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"123"</span>;

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 3.发送一个GET请求</span>
    NSString *url = @<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"http://localhost:8080/Server/login"</span>;
    [mgr GET:url parameters:params
     success:^(AFHTTPRequestOperation *operation, id responseObject) {
         <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 请求成功的时候调用这个block</span>
         NSLog(@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"请求成功---%@"</span>, responseObject);
     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
         <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 请求失败的时候调用调用这个block</span>
         NSLog(@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"请求失败"</span>);
     }];
}

<span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@end</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li><li style="box-sizing: border-box; padding: 0px 5px;">47</li><li style="box-sizing: border-box; padding: 0px 5px;">48</li><li style="box-sizing: border-box; padding: 0px 5px;">49</li><li style="box-sizing: border-box; padding: 0px 5px;">50</li><li style="box-sizing: border-box; padding: 0px 5px;">51</li><li style="box-sizing: border-box; padding: 0px 5px;">52</li><li style="box-sizing: border-box; padding: 0px 5px;">53</li><li style="box-sizing: border-box; padding: 0px 5px;">54</li><li style="box-sizing: border-box; padding: 0px 5px;">55</li><li style="box-sizing: border-box; padding: 0px 5px;">56</li><li style="box-sizing: border-box; padding: 0px 5px;">57</li><li style="box-sizing: border-box; padding: 0px 5px;">58</li><li style="box-sizing: border-box; padding: 0px 5px;">59</li><li style="box-sizing: border-box; padding: 0px 5px;">60</li><li style="box-sizing: border-box; padding: 0px 5px;">61</li><li style="box-sizing: border-box; padding: 0px 5px;">62</li><li style="box-sizing: border-box; padding: 0px 5px;">63</li><li style="box-sizing: border-box; padding: 0px 5px;">64</li><li style="box-sizing: border-box; padding: 0px 5px;">65</li><li style="box-sizing: border-box; padding: 0px 5px;">66</li><li style="box-sizing: border-box; padding: 0px 5px;">67</li><li style="box-sizing: border-box; padding: 0px 5px;">68</li><li style="box-sizing: border-box; padding: 0px 5px;">69</li><li style="box-sizing: border-box; padding: 0px 5px;">70</li><li style="box-sizing: border-box; padding: 0px 5px;">71</li><li style="box-sizing: border-box; padding: 0px 5px;">72</li><li style="box-sizing: border-box; padding: 0px 5px;">73</li><li style="box-sizing: border-box; padding: 0px 5px;">74</li><li style="box-sizing: border-box; padding: 0px 5px;">75</li><li style="box-sizing: border-box; padding: 0px 5px;">76</li><li style="box-sizing: border-box; padding: 0px 5px;">77</li><li style="box-sizing: border-box; padding: 0px 5px;">78</li><li style="box-sizing: border-box; padding: 0px 5px;">79</li><li style="box-sizing: border-box; padding: 0px 5px;">80</li><li style="box-sizing: border-box; padding: 0px 5px;">81</li><li style="box-sizing: border-box; padding: 0px 5px;">82</li><li style="box-sizing: border-box; padding: 0px 5px;">83</li><li style="box-sizing: border-box; padding: 0px 5px;">84</li><li style="box-sizing: border-box; padding: 0px 5px;">85</li><li style="box-sizing: border-box; padding: 0px 5px;">86</li><li style="box-sizing: border-box; padding: 0px 5px;">87</li><li style="box-sizing: border-box; padding: 0px 5px;">88</li><li style="box-sizing: border-box; padding: 0px 5px;">89</li><li style="box-sizing: border-box; padding: 0px 5px;">90</li><li style="box-sizing: border-box; padding: 0px 5px;">91</li><li style="box-sizing: border-box; padding: 0px 5px;">92</li><li style="box-sizing: border-box; padding: 0px 5px;">93</li><li style="box-sizing: border-box; padding: 0px 5px;">94</li><li style="box-sizing: border-box; padding: 0px 5px;">95</li><li style="box-sizing: border-box; padding: 0px 5px;">96</li><li style="box-sizing: border-box; padding: 0px 5px;">97</li><li style="box-sizing: border-box; padding: 0px 5px;">98</li><li style="box-sizing: border-box; padding: 0px 5px;">99</li><li style="box-sizing: border-box; padding: 0px 5px;">100</li><li style="box-sizing: border-box; padding: 0px 5px;">101</li><li style="box-sizing: border-box; padding: 0px 5px;">102</li><li style="box-sizing: border-box; padding: 0px 5px;">103</li><li style="box-sizing: border-box; padding: 0px 5px;">104</li><li style="box-sizing: border-box; padding: 0px 5px;">105</li><li style="box-sizing: border-box; padding: 0px 5px;">106</li><li style="box-sizing: border-box; padding: 0px 5px;">107</li><li style="box-sizing: border-box; padding: 0px 5px;">108</li><li style="box-sizing: border-box; padding: 0px 5px;">109</li><li style="box-sizing: border-box; padding: 0px 5px;">110</li><li style="box-sizing: border-box; padding: 0px 5px;">111</li><li style="box-sizing: border-box; padding: 0px 5px;">112</li><li style="box-sizing: border-box; padding: 0px 5px;">113</li><li style="box-sizing: border-box; padding: 0px 5px;">114</li><li style="box-sizing: border-box; padding: 0px 5px;">115</li><li style="box-sizing: border-box; padding: 0px 5px;">116</li><li style="box-sizing: border-box; padding: 0px 5px;">117</li><li style="box-sizing: border-box; padding: 0px 5px;">118</li><li style="box-sizing: border-box; padding: 0px 5px;">119</li><li style="box-sizing: border-box; padding: 0px 5px;">120</li><li style="box-sizing: border-box; padding: 0px 5px;">121</li><li style="box-sizing: border-box; padding: 0px 5px;">122</li><li style="box-sizing: border-box; padding: 0px 5px;">123</li><li style="box-sizing: border-box; padding: 0px 5px;">124</li><li style="box-sizing: border-box; padding: 0px 5px;">125</li><li style="box-sizing: border-box; padding: 0px 5px;">126</li><li style="box-sizing: border-box; padding: 0px 5px;">127</li><li style="box-sizing: border-box; padding: 0px 5px;">128</li><li style="box-sizing: border-box; padding: 0px 5px;">129</li><li style="box-sizing: border-box; padding: 0px 5px;">130</li><li style="box-sizing: border-box; padding: 0px 5px;">131</li><li style="box-sizing: border-box; padding: 0px 5px;">132</li><li style="box-sizing: border-box; padding: 0px 5px;">133</li><li style="box-sizing: border-box; padding: 0px 5px;">134</li><li style="box-sizing: border-box; padding: 0px 5px;">135</li><li style="box-sizing: border-box; padding: 0px 5px;">136</li><li style="box-sizing: border-box; padding: 0px 5px;">137</li><li style="box-sizing: border-box; padding: 0px 5px;">138</li><li style="box-sizing: border-box; padding: 0px 5px;">139</li><li style="box-sizing: border-box; padding: 0px 5px;">140</li><li style="box-sizing: border-box; padding: 0px 5px;">141</li><li style="box-sizing: border-box; padding: 0px 5px;">142</li><li style="box-sizing: border-box; padding: 0px 5px;">143</li><li style="box-sizing: border-box; padding: 0px 5px;">144</li></ul>

AFNetworking文件上传实例

<code class="hljs objectivec has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#import <span class="hljs-title" style="box-sizing: border-box;">"AFNetworking.h"</span></span>

<span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@interface</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">ViewController</span> () <<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">UINavigationControllerDelegate</span>, <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">UIImagePickerControllerDelegate</span>,<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">UIActionSheetDelegate</span>></span>
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@property</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">weak</span>, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">nonatomic</span>) <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">IBOutlet</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">UIImageView</span> *imageView;
- (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">IBAction</span>)upload;
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@end</span>

<span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@implementation</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">ViewController</span></span>

- (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)viewDidLoad
{
    [<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">super</span> viewDidLoad];
    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Do any additional setup after loading the view, typically from a nib.</span>
}

- (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"请选择图片"</span> delegate:<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span> cancelButtonTitle:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"取消"</span> destructiveButtonTitle:<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">nil</span> otherButtonTitles:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"拍照"</span>, @<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"相册"</span>, <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">nil</span>];
    [sheet showInView:<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.view</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.window</span>];
}

<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#pragma mark - UIActionSheet</span>
- (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSInteger</span>)buttonIndex
{
    UIImagePickerController *ipc = [[UIImagePickerController alloc] init];
    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 设置代理</span>
    ipc<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.delegate</span> = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span>;

    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">switch</span> (buttonIndex) {
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">case</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>: { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 拍照</span>
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>;
            ipc<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.sourceType</span> = UIImagePickerControllerSourceTypeCamera;
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">break</span>;
        }
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">case</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>: { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 相册</span>
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>;
            ipc<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.sourceType</span> = UIImagePickerControllerSourceTypePhotoLibrary;
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">break</span>;
        }
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">default</span>:
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">break</span>;
    }

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 显示控制器</span>
    [<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span> presentViewController:ipc animated:<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">YES</span> completion:<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">nil</span>];
}

<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#pragma mark - UIImagePickerControllerDelegate</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
 *  在选择完图片后调用
 *
 *  @param info   里面包含了图片信息
 */</span>
- (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSDictionary</span> *)info
{
    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 销毁控制器</span>
    [picker dismissViewControllerAnimated:<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">YES</span> completion:<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">nil</span>];

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 获得图片</span>
    <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">UIImage</span> *image = info[UIImagePickerControllerOriginalImage];

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 显示图片</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.imageView</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.image</span> = image;
}

- (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)upload1
{
    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 1.创建一个管理者</span>
    AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 2.封装参数(这个字典只能放非文件参数)</span>
    <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSMutableDictionary</span> *params = [<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSMutableDictionary</span> dictionary];
    params[@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"username"</span>] = @<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"123"</span>;
    params[@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"age"</span>] = @<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">20</span>;
    params[@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"pwd"</span>] = @<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"456"</span>;
    params[@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"height"</span>] = @<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1.55</span>;

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 2.发送一个请求</span>
    <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSString</span> *url = @<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"http://localhost:8080/MJServer/upload"</span>;
    [mgr POST:url parameters:params constructingBodyWithBlock:^(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">id</span><AFMultipartFormData> formData) {
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 在发送请求之前会自动调用这个block</span>
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 需要在这个block中添加文件参数到formData中</span>

        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
         FileURL : 需要上传的文件的URL路径
         name : 服务器那边接收文件用的参数名
         fileName : (告诉服务器)所上传文件的文件名
         mimeType : 所上传文件的文件类型
         */</span>
        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSURL</span> *url = [[<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSBundle</span> mainBundle] URLForResource:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"itcast"</span> withExtension:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"txt"</span>];
        [formData appendPartWithFileURL:url name:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"file"</span> fileName:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"test.txt"</span> mimeType:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"text/plain"</span> error:<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">nil</span>];

        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
         FileData : 需要上传的文件的具体数据
         name : 服务器那边接收文件用的参数名
         fileName : (告诉服务器)所上传文件的文件名
         mimeType : 所上传文件的文件类型
         */</span>
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//        UIImage *image = [UIImage imageNamed:@"minion_01"];</span>
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//        NSData *fileData = UIImagePNGRepresentation(image);</span>
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//        [formData appendPartWithFileData:fileData name:@"file" fileName:@"haha.png" mimeType:@"image/png"];</span>
    } success:^(AFHTTPRequestOperation *operation, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">id</span> responseObject) {
        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSLog</span>(@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"上传成功"</span>);
    } failure:^(AFHTTPRequestOperation *operation, <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSError</span> *error) {
        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSLog</span>(@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"上传失败"</span>);
    }];
}

- (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">IBAction</span>)upload {
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.imageView</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.image</span> == <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">nil</span>) <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>;

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 1.创建一个管理者</span>
    AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 2.封装参数(这个字典只能放非文件参数)</span>
    <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSMutableDictionary</span> *params = [<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSMutableDictionary</span> dictionary];
    params[@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"username"</span>] = @<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"123"</span>;
    params[@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"age"</span>] = @<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">20</span>;
    params[@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"pwd"</span>] = @<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"456"</span>;
    params[@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"height"</span>] = @<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1.55</span>;

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 2.发送一个请求</span>
    <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSString</span> *url = @<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"http://192.168.15.172:8080/Server/upload"</span>;
    [mgr POST:url parameters:params constructingBodyWithBlock:^(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">id</span><AFMultipartFormData> formData) {
        NSData *fileData = UIImageJPEGRepresentation(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.imageView</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.image</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1.0</span>);
        [formData appendPartWithFileData:fileData name:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"file"</span> fileName:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"haha.jpg"</span> mimeType:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"image/jpeg"</span>];

        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 不是用这个方法来设置文件参数</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//        [formData appendPartWithFormData:fileData name:@"file"];</span>
    } success:^(AFHTTPRequestOperation *operation, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">id</span> responseObject) {
        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSLog</span>(@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"上传成功"</span>);
    } failure:^(AFHTTPRequestOperation *operation, <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSError</span> *error) {
        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSLog</span>(@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"上传失败"</span>);
    }];

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 文件下载,文件比较大,断点续传技术:普遍所有的HTTP服务器都支持</span>
    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 文件上传,文件比较大,断点续传技术:一般的HTTP服务器都不支持,常用的技术用的是Socket(TCP\IP、UDP)</span>
}
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@end</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li><li style="box-sizing: border-box; padding: 0px 5px;">47</li><li style="box-sizing: border-box; padding: 0px 5px;">48</li><li style="box-sizing: border-box; padding: 0px 5px;">49</li><li style="box-sizing: border-box; padding: 0px 5px;">50</li><li style="box-sizing: border-box; padding: 0px 5px;">51</li><li style="box-sizing: border-box; padding: 0px 5px;">52</li><li style="box-sizing: border-box; padding: 0px 5px;">53</li><li style="box-sizing: border-box; padding: 0px 5px;">54</li><li style="box-sizing: border-box; padding: 0px 5px;">55</li><li style="box-sizing: border-box; padding: 0px 5px;">56</li><li style="box-sizing: border-box; padding: 0px 5px;">57</li><li style="box-sizing: border-box; padding: 0px 5px;">58</li><li style="box-sizing: border-box; padding: 0px 5px;">59</li><li style="box-sizing: border-box; padding: 0px 5px;">60</li><li style="box-sizing: border-box; padding: 0px 5px;">61</li><li style="box-sizing: border-box; padding: 0px 5px;">62</li><li style="box-sizing: border-box; padding: 0px 5px;">63</li><li style="box-sizing: border-box; padding: 0px 5px;">64</li><li style="box-sizing: border-box; padding: 0px 5px;">65</li><li style="box-sizing: border-box; padding: 0px 5px;">66</li><li style="box-sizing: border-box; padding: 0px 5px;">67</li><li style="box-sizing: border-box; padding: 0px 5px;">68</li><li style="box-sizing: border-box; padding: 0px 5px;">69</li><li style="box-sizing: border-box; padding: 0px 5px;">70</li><li style="box-sizing: border-box; padding: 0px 5px;">71</li><li style="box-sizing: border-box; padding: 0px 5px;">72</li><li style="box-sizing: border-box; padding: 0px 5px;">73</li><li style="box-sizing: border-box; padding: 0px 5px;">74</li><li style="box-sizing: border-box; padding: 0px 5px;">75</li><li style="box-sizing: border-box; padding: 0px 5px;">76</li><li style="box-sizing: border-box; padding: 0px 5px;">77</li><li style="box-sizing: border-box; padding: 0px 5px;">78</li><li style="box-sizing: border-box; padding: 0px 5px;">79</li><li style="box-sizing: border-box; padding: 0px 5px;">80</li><li style="box-sizing: border-box; padding: 0px 5px;">81</li><li style="box-sizing: border-box; padding: 0px 5px;">82</li><li style="box-sizing: border-box; padding: 0px 5px;">83</li><li style="box-sizing: border-box; padding: 0px 5px;">84</li><li style="box-sizing: border-box; padding: 0px 5px;">85</li><li style="box-sizing: border-box; padding: 0px 5px;">86</li><li style="box-sizing: border-box; padding: 0px 5px;">87</li><li style="box-sizing: border-box; padding: 0px 5px;">88</li><li style="box-sizing: border-box; padding: 0px 5px;">89</li><li style="box-sizing: border-box; padding: 0px 5px;">90</li><li style="box-sizing: border-box; padding: 0px 5px;">91</li><li style="box-sizing: border-box; padding: 0px 5px;">92</li><li style="box-sizing: border-box; padding: 0px 5px;">93</li><li style="box-sizing: border-box; padding: 0px 5px;">94</li><li style="box-sizing: border-box; padding: 0px 5px;">95</li><li style="box-sizing: border-box; padding: 0px 5px;">96</li><li style="box-sizing: border-box; padding: 0px 5px;">97</li><li style="box-sizing: border-box; padding: 0px 5px;">98</li><li style="box-sizing: border-box; padding: 0px 5px;">99</li><li style="box-sizing: border-box; padding: 0px 5px;">100</li><li style="box-sizing: border-box; padding: 0px 5px;">101</li><li style="box-sizing: border-box; padding: 0px 5px;">102</li><li style="box-sizing: border-box; padding: 0px 5px;">103</li><li style="box-sizing: border-box; padding: 0px 5px;">104</li><li style="box-sizing: border-box; padding: 0px 5px;">105</li><li style="box-sizing: border-box; padding: 0px 5px;">106</li><li style="box-sizing: border-box; padding: 0px 5px;">107</li><li style="box-sizing: border-box; padding: 0px 5px;">108</li><li style="box-sizing: border-box; padding: 0px 5px;">109</li><li style="box-sizing: border-box; padding: 0px 5px;">110</li><li style="box-sizing: border-box; padding: 0px 5px;">111</li><li style="box-sizing: border-box; padding: 0px 5px;">112</li><li style="box-sizing: border-box; padding: 0px 5px;">113</li><li style="box-sizing: border-box; padding: 0px 5px;">114</li><li style="box-sizing: border-box; padding: 0px 5px;">115</li><li style="box-sizing: border-box; padding: 0px 5px;">116</li><li style="box-sizing: border-box; padding: 0px 5px;">117</li><li style="box-sizing: border-box; padding: 0px 5px;">118</li><li style="box-sizing: border-box; padding: 0px 5px;">119</li><li style="box-sizing: border-box; padding: 0px 5px;">120</li><li style="box-sizing: border-box; padding: 0px 5px;">121</li><li style="box-sizing: border-box; padding: 0px 5px;">122</li><li style="box-sizing: border-box; padding: 0px 5px;">123</li><li style="box-sizing: border-box; padding: 0px 5px;">124</li><li style="box-sizing: border-box; padding: 0px 5px;">125</li><li style="box-sizing: border-box; padding: 0px 5px;">126</li><li style="box-sizing: border-box; padding: 0px 5px;">127</li><li style="box-sizing: border-box; padding: 0px 5px;">128</li><li style="box-sizing: border-box; padding: 0px 5px;">129</li><li style="box-sizing: border-box; padding: 0px 5px;">130</li><li style="box-sizing: border-box; padding: 0px 5px;">131</li><li style="box-sizing: border-box; padding: 0px 5px;">132</li><li style="box-sizing: border-box; padding: 0px 5px;">133</li><li style="box-sizing: border-box; padding: 0px 5px;">134</li><li style="box-sizing: border-box; padding: 0px 5px;">135</li><li style="box-sizing: border-box; padding: 0px 5px;">136</li><li style="box-sizing: border-box; padding: 0px 5px;">137</li><li style="box-sizing: border-box; padding: 0px 5px;">138</li><li style="box-sizing: border-box; padding: 0px 5px;">139</li></ul>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值