自己封装的网络请求

#import <Foundation/Foundation.h>

//定义枚举
typedef NS_ENUM(NSInteger){
    LDT_GET,
    LDT_POST
}URLRequestMethod;

//定义返回值block网络请求结果
typedef void(^ResultBlock)(NSData *data,NSURLResponse *response,NSError *error);

@interface LDTNetWorkRequestManager : NSObject

///请求方法
+ (void)requestURL:(NSURL*)url Method:(URLRequestMethod)method Params:(NSDictionary *)params Result:(ResultBlock)resultBlock;

@end

#import "LDTNetWorkRequestManager.h"

@interface LDTNetWorkRequestManager ()

//存储回调block的属性
//@property(nonatomic,copy)ResultBlock block;

@end

@implementation LDTNetWorkRequestManager

//请求方法
+ (void)requestURL:(NSURL *)url Method:(URLRequestMethod)method Params:(NSDictionary *)params Result:(ResultBlock)resultBlock
{
    ///空的可变字符串
    NSMutableString *urlString = [NSMutableString new];
    //isKindOfClass来确定一个对象是否是一个类的成员,或者是派生自该类的成员
    if ([url isKindOfClass:[NSURL class]]) {
        //拼接url
        [urlString appendString:url.absoluteString];
        
    }else if ([url isKindOfClass:[NSString class]]){
        
        [urlString appendString:(NSString *)url];
    }
    if (urlString.length ==0) {
        NSError *error = [NSError errorWithDomain:@"EPA" code:3.1415926 userInfo:@{@"reason":@"你输入的网址不正确"}];
        resultBlock(nil,nil,error);
        return;
    }
    //把参数字典转换为字符串
    LDTNetWorkRequestManager *manager = [LDTNetWorkRequestManager new];
    
    NSString *paraStr = [manager strFromDict:params];
    
    switch (method) {
        case LDT_GET:
        {
            if (paraStr.length > 0) {
                
                [urlString appendFormat:@"?%@",paraStr];
            }
            [manager requestURL:[NSURL URLWithString:urlString] ResultBlock:resultBlock];
            
        }
            break;
            
        case LDT_POST:
            [manager postURL:urlString paraStr:paraStr ResultBlock:resultBlock];
            break;
        default:
            break;
    }
    
}

#pragma mark - GET网络请求

- (void)requestURL:(NSURL *)url ResultBlock:(ResultBlock)block
{
    NSURLSessionDataTask *task = [[NSURLSession sharedSession]dataTaskWithURL:url completionHandler:block];
                                  
    //开始网络请求
    [task resume];
}

#pragma mark - POST网络请求

- (void)postURL:(NSString *)urlStr paraStr:(NSString *)paraStr ResultBlock:(ResultBlock)block
{
    //创建NSURL
    NSURL *url = [NSURL URLWithString:urlStr];
    //创建可变请求
    NSMutableURLRequest *mRequest = [NSMutableURLRequest requestWithURL:url];
    //设置POST方法
    [mRequest setHTTPMethod:@"POST"];
    //请求体
    [mRequest setHTTPBody:[paraStr dataUsingEncoding:NSUTF8StringEncoding]];
    
   
    NSURLSessionDataTask *dataTask = [[NSURLSession sharedSession]dataTaskWithRequest:mRequest completionHandler:block];
                                      
    [dataTask resume];
    
}

- (NSString *)strFromDict:(NSDictionary *)dict
{
    //空数组
    NSMutableArray *array = [NSMutableArray new];
    for (NSString *key in dict) {
        NSString *str = [NSString stringWithFormat:@"%@ = %@",key,dict[key]];
        [array addObject:str];
    }
    //数组拼接字符串
    NSString *para = [array componentsJoinedByString:@"&"];
    NSLog(@"%@",para);
    //返回
    return para;
}

@end

时间: 2024-08-04 22:20:11

自己封装的网络请求的相关文章

block传值以及利用block封装一个网络请求类

1.block在俩个UIViewController间传值 最近刚学了几招block 的高级用法,其实就是利用block语法在俩个UIViewController之间传值,在这里分享给初学者,同时也方便我自己理解.我们知道UINavigationController类管理UIViewController的时候,利用的是"栈"的思想,在这里不做过多解释,切入正题,假设我们现在有俩个UIViewController,viewC1和viewC2,viewC1比viewC2先进入到UINavi

iOS 自己封装的网络请求,json解析的类

基本上所有的APP都会涉及网络这块,不管是用AFNetWorking还是自己写的http请求,整个网络框架的搭建很重要. 楼主封装的网络请求类,包括自己写的http请求和AFNetWorking的请求,代码简单,主要是框架搭建.简单来说,就是一个请求类,一个解析类,还有若干数据类. 以下代码以公开的天气查询api为例: 1.网络请求类 我把常用的网络请求方法都封装好了,你只需要写自己的接口,传递apiName,params等参数就可以. #pragma mark ios请求方式 //ios自带的

AFNetworking封装的网络请求

#import "AFNetworking.h" typedef void(^SuccessBlock)(AFHTTPRequestOperation * operation, id responseObj); typedef void(^FailBlock)(NSError * error, id responseObj); #import <Foundation/Foundation.h> @interface NetworkingManager : NSObject

基于AFNetworking封装的网络请求工具类

前提,导入AFNetworking框架 关于修改AFN源码:通常序列化时做对text/plan等的支持时,可以一劳永逸的修改源代码,在acceptableContentTypes中修改即可. GGRequest.h 1 #import <Foundation/Foundation.h> 2 3 @interface GGRequest : NSObject 4 /** 5 * 网络请求方法 6 * 7 * @param url 将要访问的链接 8 * @param param 传入的参数 9

第八篇、封装NSURLSession网络请求框架

主要功能介绍: 1.GET请求操作 2.POST请求操作 1.处理params参数(例如拼接成:usename="123"&password="123") #import <Foundation/Foundation.h> @interface LYURLRequestSerialization : NSObject +(NSString *)LYQueryStringFromParameters:(NSDictionary *)paramete

31封装一个网络请求的服务

①创建一个服务类 @Injectable() 在服务类中定义方法.数据 sendRequest ( myUrl : string ) { return this.http.get( myUrl ).map(  (response : Response) => response.json()  ) } ②给服务指定提供商 providers : [ MyHttpService ]  模块.组件限定作用范围 ③调用服务 import { } this.myHttpService.sendRequse

HttpURLConnection封装异步网络请求

/** * Implementation of AsyncTask, to fetch the data in the background away from * the UI thread. */ private class DownloadTask extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... urls) { try { return loadFr

用Block封装网络请求

#import <Foundation/Foundation.h> // 定义一个枚举typedef NS_ENUM(NSInteger) {    LY_GET,    LY_POST} URLRequestMethod;///定义返回block网络请求结果typedef void(^ResultBlock)(NSData *data,NSURLResponse *response,NSError *error); @interface LYNetWorkRequestManager : N

封装网络请求

封装网络请求类便捷, 适合多个地方使用. 第一封装下载方法 前提用Cocoapods或者直接引用第三方AFNetWorking 定义一个类NetWorkingManager, 继承于NSObject A: 在.h中写方法声明 #import <Foundation/Foundation.h> @interface NetWorkManager : NSObject - (void)downLoadWithUrl:(NSString *)url progress:(void(^)(float p