iOS HTTP网络请求,没有使用框架的request
2017-01-06 14:52
260 查看
//
数据请求
[Manager
requestData:@"ji"
params:params handler:^(NSDictionary *info,
NSError *error) {
if (handler) {
if ((!error) && ([info
count] > 0)) {
}
else {
}
handler(info, error);
}
}];
////////////////////////////////////////////////////////////////////////////////////////////////
+ (void)requestData:(NSString *)apiName params:(NSDictionary *)params handler:(void
(^)(NSDictionary *,
NSError *))handler
{
// 设置请求
NSMutableURLRequest *request = [self
createRequest:apiName];
[request setHTTPMethod:
@"POST"];
[request setValue:@"application/json"
forHTTPHeaderField:@"Content-Type"];
NSData *jsonData = [NSJSONSerialization
dataWithJSONObject:params
options:NSJSONWritingPrettyPrinted
error:nil];
[request setValue:[NSString
stringWithFormat:@"%lu", (unsigned
long)[jsonData
length]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:jsonData];
NSURLSession *session = [NSURLSession
sharedSession];
[[session dataTaskWithRequest:request
completionHandler:^(NSData *data,
NSURLResponse *response,
NSError *error) {
NSDictionary *info;
NSError *apiError = error;
if (data && !error) {
NSHTTPURLResponse *httpRes = (NSHTTPURLResponse *)response;
if ([self
checkHttpStatus:httpRes
error:&apiError]) {
NSError *parseError;
NSDictionary *dic = [NSJSONSerialization
JSONObjectWithData:data
options:NSJSONReadingAllowFragments
error:&parseError];
if (parseError)
{
apiError = parseError;
}
else
{
// 成功
info = dic;
}
}
}
if (handler)
{
handler(info, apiError);
}
}] resume];
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ (NSMutableURLRequest *)createRequest:(NSString *)apiName
{
CommonInfo *cmnInfo = [CommonInfo
sharedInstance];
//找到在CommonInfo中设置好的url
NSString *urlBase = cmnInfo.appSettings.api_url;
NSString *urlString = [urlBase
stringByAppendingPathComponent:apiName];
NSURL *url = [NSURL
URLWithString:urlString];
// request的设置
NSMutableURLRequest *request = [NSMutableURLRequest
requestWithURL:url
cachePolicy:
NSURLRequestUseProtocolCachePolicy
timeoutInterval:REQUEST_TIMEOUT];
// cookies的设置
NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage
sharedHTTPCookieStorage];
if (cookieStorage.cookies.count >
0)
{
NSDictionary *header = [NSHTTPCookie
requestHeaderFieldsWithCookies:cookieStorage.cookies];
[request setAllHTTPHeaderFields:header];
}
return request;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
+ (BOOL)checkHttpStatus:(NSHTTPURLResponse *)res error:(NSError *
__autoreleasing *)error
{
BOOL ret =
NO;
// 根据HTTP的状态判断是否error
if (res.statusCode ==
200)
{
ret = YES;
}
else
if (res.statusCode ==
401)
{
*error = [SWKAPIError
errorWithMessage:SWKAPIErrorSessionTimeout
message:@"TODO:"];
}
else
{
}
return ret;
}
数据请求
[Manager
requestData:@"ji"
params:params handler:^(NSDictionary *info,
NSError *error) {
if (handler) {
if ((!error) && ([info
count] > 0)) {
}
else {
}
handler(info, error);
}
}];
////////////////////////////////////////////////////////////////////////////////////////////////
+ (void)requestData:(NSString *)apiName params:(NSDictionary *)params handler:(void
(^)(NSDictionary *,
NSError *))handler
{
// 设置请求
NSMutableURLRequest *request = [self
createRequest:apiName];
[request setHTTPMethod:
@"POST"];
[request setValue:@"application/json"
forHTTPHeaderField:@"Content-Type"];
NSData *jsonData = [NSJSONSerialization
dataWithJSONObject:params
options:NSJSONWritingPrettyPrinted
error:nil];
[request setValue:[NSString
stringWithFormat:@"%lu", (unsigned
long)[jsonData
length]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:jsonData];
NSURLSession *session = [NSURLSession
sharedSession];
[[session dataTaskWithRequest:request
completionHandler:^(NSData *data,
NSURLResponse *response,
NSError *error) {
NSDictionary *info;
NSError *apiError = error;
if (data && !error) {
NSHTTPURLResponse *httpRes = (NSHTTPURLResponse *)response;
if ([self
checkHttpStatus:httpRes
error:&apiError]) {
NSError *parseError;
NSDictionary *dic = [NSJSONSerialization
JSONObjectWithData:data
options:NSJSONReadingAllowFragments
error:&parseError];
if (parseError)
{
apiError = parseError;
}
else
{
// 成功
info = dic;
}
}
}
if (handler)
{
handler(info, apiError);
}
}] resume];
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ (NSMutableURLRequest *)createRequest:(NSString *)apiName
{
CommonInfo *cmnInfo = [CommonInfo
sharedInstance];
//找到在CommonInfo中设置好的url
NSString *urlBase = cmnInfo.appSettings.api_url;
NSString *urlString = [urlBase
stringByAppendingPathComponent:apiName];
NSURL *url = [NSURL
URLWithString:urlString];
// request的设置
NSMutableURLRequest *request = [NSMutableURLRequest
requestWithURL:url
cachePolicy:
NSURLRequestUseProtocolCachePolicy
timeoutInterval:REQUEST_TIMEOUT];
// cookies的设置
NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage
sharedHTTPCookieStorage];
if (cookieStorage.cookies.count >
0)
{
NSDictionary *header = [NSHTTPCookie
requestHeaderFieldsWithCookies:cookieStorage.cookies];
[request setAllHTTPHeaderFields:header];
}
return request;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
+ (BOOL)checkHttpStatus:(NSHTTPURLResponse *)res error:(NSError *
__autoreleasing *)error
{
BOOL ret =
NO;
// 根据HTTP的状态判断是否error
if (res.statusCode ==
200)
{
ret = YES;
}
else
if (res.statusCode ==
401)
{
*error = [SWKAPIError
errorWithMessage:SWKAPIErrorSessionTimeout
message:@"TODO:"];
}
else
{
}
return ret;
}
相关文章推荐
- iOS网络编程-ASIHTTPRequest框架同步请求
- iOS网络编程-ASIHTTPRequest框架同步请求
- iOS网络编程-ASIHTTPRequest框架同步请求 推荐
- iOS网络编程-ASIHTTPRequest框架同步请求-备用
- IOS网络请求框架AFNetworking和ASIHttpRequest对比
- iOS网络编程-ASIHTTPRequest框架同步请求
- IOS网络通信 之第三方框架ASIHttpRequest的简单使用
- IOS常用第三方框架 --- ASIHTTPRequest 网络请求
- iOS网络编程-ASIHTTPRequest框架同步请求
- iOS网络编程--ASIHTTPRequest框架安装和配置-图文解说
- iOS网络编程-ASIHTTPRequest小例子-数据请求队列
- iOS网络编程-ASIHTTPRequest异步请求
- iOS网络编程-ASIHTTPRequest小例子-数据请求队列
- iOS网络编程-ASIHTTPRequest异步请求
- iOS网络编程-ASIHTTPRequest异步请求
- iOS网络编程–ASIHTTPRequest框架安装和配置-图文解说
- iOS网络编程 ASIHTTPRequest 详解, http 请求终结者
- iOS网络编程-ASIHTTPRequest小例子-数据请求队列
- ASIHttpRequest网络使用框架
- iOS网络编程-ASIHTTPRequest小例子-数据请求队列