AFNetworking 的请求方法

AFNetworking 使用方法(2.0)

本文介绍的是AFNetworking-2.0 使用方法(增加适应:不完善的head內的 meta的content格式)

随着asihttprequest的停止更新,许多人都转向了AFNetworking、 MKNetworkKit.我也是其中一个。于是我从网上找了许多文章作参考,但是结果都是失败告终。研究了好久都搞不透,最后还是请人帮忙搞定了。经常从网上索取免费资料的一员,要有回报的思想,也为了让更多的人少走些弯路,所以下面是代码:(有错误可以指出)

首先:将AFNetworking、UIKit+AFNetworking 加入到工程

一般要引用这两个包,不然会有错误提示:SystemConfiguration.framework、 MobileCoreServices.framework

然后在要使用的地方

#import "AFHTTPRequestOperationManager.h"

#import "AFHTTPSessionManager.h"

AFHTTPRequestOperationManager的post有两个方法,一个是普通的post,另一个是可以上传图片的

1.上传图片:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManagermanager];
manager.responseSerializer.acceptableContentTypes = [NSSetsetWithObject:@"text/html"];
NSDictionary *parameters [email protected]{@"参数1":@"value1",@"参数2":@"value2"、、、};
    
    NSData *imageData = UIImageJPEGRepresentation([UIImage imageNamed:@"1.png"], 1.0);
[manager POST:@"替换成你要访问的地址"parameters:parametersconstructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData :imageData name:@"1" fileName:@"1.png" mimeType:@"image/jpeg"];
} success:^(AFHTTPRequestOperation *operation,id responseObject) {
        NSLog(@"Success: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation,NSError *error) {
        NSLog(@"Error: %@", error);
}];
这个方法可以上传图片,如果不用上传图片,可以把这句去掉[formData
appendPartWithFileData :imageData
name:@"1"fileName:@"1.png"mimeType:@"image/jpeg"]
2.普通的post

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManagermanager];

manager.responseSerializer.acceptableContentTypes = [NSSetsetWithObject:@"text/html"];

NSDictionary *parameters =@{@"参数1":@"value1",@"参数2":@"value2"、、、};

[managerPOST:@"替换成你要访问的地址"parameters:parameters

success:^(AFHTTPRequestOperation *operation,id responseObject) {

NSLog(@"Success: %@", responseObject);

}failure:^(AFHTTPRequestOperation *operation,NSError *error) {

NSLog(@"Error: %@", error);

}];

3.增加适应:不完善的head內的 meta的content格式(2014年3月17日11:20)
引用:http://www.cocoachina.com/bbs/simple/?t176000.html
tom19830924 2013-12-27 17:44
這是我第二次回答這問題了 這不是AFNetworking的問題
這是做Server那邊的人沒把head內的 meta的content格式指定好

請參考
http://stackoverflow.com/questions/477816/what-is-the-correct-json-content-type

evangel 2014-03-18 21:41
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    manager.responseSerializer = [AFJSONResponseSerializer serializer];
    [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
    [manager.requestSerializer setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
解决方法:我使用的是evangel的方法,增加下面4句:
   manager.requestSerializer = [AFJSONRequestSerializer serializer];
    manager.responseSerializer = [AFJSONResponseSerializer serializer];
    [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
    [manager.requestSerializer setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
下面是完整的请求设置:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManagermanager];

manager.responseSerializer.acceptableContentTypes = [NSSetsetWithObject:@"text/html"];

manager.requestSerializer = [AFJSONRequestSerializerserializer];

manager.responseSerializer = [AFJSONResponseSerializerserializer];

[manager.requestSerializersetValue:@"application/json"forHTTPHeaderField:@"Accept"];

[manager.requestSerializersetValue:@"application/json; charset=utf-8"forHTTPHeaderField:@"Content-Type"];

4.超时设置(2014年10月17日15:20)
afnetworking 2.0 没有超时设置,好像2.1以后就有了超时时间设置。
打开你下载的版本,找到AFURLRequewtSerialization.m ,搜索timeout。timeout默认时间是60秒,把它改成你需要的时间

AFNetworking中最常用的就是POST和GET请求,但是可能很多人都不知道,这个强大的框架还可以配置HTTPHeader
首先看一下我们常用的方法


1

2

3

4

5

6

7

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

manager.responseSerializer = [AFJSONResponseSerializer new];

[manager POST:url parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

}];

这个常规的用法我们只需要给manager的responseSerializer new一个对象即可使用,但是如果需要给请求配置特定的Header的话,可以看下面的代码
首先,给请求的serializer new一个对象,这一步千万不能忘,不然后面的配置都无效!!!


1

manager.requestSerializer = [AFJSONRequestSerializer new];

设置请求内容的类型


1

[manager.requestSerializer setValue:@"application/json;charset=utf-8" forHTTPHeaderField:@"Content-Type"];

设置请求内容的长度


1

[manager.requestSerializer setValue:[NSString stringWithFormat:@"%ld", (unsigned long)[jsonStr length]] forHTTPHeaderField:@"Content-Length"];

设置请求的编码类型


1

[manager.requestSerializer setValue:@"gzip" forHTTPHeaderField:@"Content-Encoding"];

时间: 2024-08-11 00:35:51

AFNetworking 的请求方法的相关文章

AFNetWorking 网络请求转载

今天开始会写几篇关于AFN源码解读的一些Blog,首先要梳理一下AFN的整体结构(主要是讨论2.x版本的Session访问模块):我们先看看我们最常用的一段代码: AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; [manager GET:@"https://www.baidu.com" parameters:nil success:^(NSURLSessionDataTask * _Nonnull task

swift网络数据请求方法

搭建一个apache服务器,用php编写一个返回给客户端请求数据的脚本 1 <?php 2 // header("Content-type:text/html;charset=utf-8"); 3 header("Content-type:text/json;charset=utf-8"); 4 if (isset($_REQUEST['name'])) { 5 $result = $_REQUEST['name']; 6 $arr=array("r

iOS开发——网络请求方法汇总

在实际的项目开发中,连接网络是每一款App必不可少的基本功能.对于客户端的网络请求而言,无非是有两个实现方向:使用网络请求框架或者不使用网络请求框架.在这篇博客中,我将用苹果自带的网络请求方式(不使用第三方框架)下对iOS网络请求方法做一个汇总.我将在之后的博客中介绍使用AFNetworking框架进行请求的实现.代码已经上传至:https://github.com/chenyufeng1991/iOS-NetworkRequest   . [使用XML请求Webservice,可用GET或PO

iOS开发 - AFNetworking网络请求

AFNetworking 什么是AFN 全称是AFNetworking,是对NSURLConnection.NSURLSession的一层封装 虽然运行效率没有ASI高,但是使用比ASI简单 在iOS开发中,使用比较广泛 AFN的github地址 https://github.com/AFNetworking/AFNetworking AFHTTPRequestOperationManager 是AFN中最重要的对象之一 封装了HTTP请求的常见处理 GET\POST请求 解析服务器的响应数据

HTTP请求响应报文&amp;&amp;相关状态码&amp;&amp;GET_POST请求方法 总结

HTTP请求报文: 一个HTTP请求报文由四个部分组成:请求行.请求头部.空行.请求数据 1.请求行   请求行由请求方法字段.URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔.比如 GET /data/info.html HTTP/1.1 方法字段就是HTTP使用的请求方法,比如常见的GET/POST 其中HTTP协议版本有两种:HTTP1.0/HTTP1.1 可以这样区别: HTTP1.0对于每个连接都的建立一次连接一次只能传送一个请求和响应,请求就会关闭,HTTP1.0没有Ho

一、OkHttp请求方法

OkHttp是一个高效的HTTP库: 支持 SPDY ,共享同一个 Socket 来处理同一个服务器的所有请求 如果 SPDY 不可用,则通过连接池来减少请求延时 无缝的支持GZIP来减少数据流量 缓存响应数据来减少重复的网络请求 OkHttp 处理了很多网络疑难杂症:会从很多常用的连接问题中自动恢复.如果您的服务器配置了多个IP地址,当第一个IP连接失败的时候,OkHttp会自动尝试下一个IP.OkHttp还处理了代理服务器问题和SSL握手失败问题. OkHttp是一个相对成熟的解决方案,据说

微信小程序数据请求方法wx.request小测试

微信小程序数据请求方法 wx.request wxml文件: <view> <textarea value="{{textdata}}"/> </view> <button bindtap="RequestData" value="Button">Button</button> 主要是一个按钮,点击后将请求的数据写入到textarea中 js文件: Page({ data:{ textd

python http请求方法整理

在python开发(http://www.maiziedu.com/course/python-px/)中,我们一般通过get.post方式发送http请求,可是最近在使用python做接口测试,发现python中http请求方法有许多种,作者整理了一番,把python中http请求方法都总结了出来,分享给大家,具体内容如下所示: 一.python自带库----urllib2 python自带库urllib2使用的比较多,简单使用如下: import urllib2 response = url

HTTP请求方法

HTTP请求方法 HTTP GET POST 1.OPTIONS 返回服务器针对特定资源所支持的HTTP请求方法 2.HEAD 向服务器请求与GET请求相一致的响应,只不过响应体将不会被返回 3.GET 向特定的资源发出请求 注:GET方法不应当被用于产生"副作用"的操作中 4.POST 向指定资源提交数据进行处理请求(例如:提交表单或者上传文件) 5.PUT 向指定资源位置上传其最新内容 6.DELETE 请求服务器删除Request_URL所标识的资源 7.TRACE 回显服务器收