简单网络请求封装

//
//  HTTPRequset.h
//  请求类分装
//
//  Created by qianfeng on 15-7-26.
//  Copyright (c) 2015年 qq. All rights reserved.
//
//通过代理和block实现函数回调,可选其一
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@class HTTPRequset;
@protocol HTTPRequsetDelegate <NSObject>

@optional
/**
    进度的回调
 */
- (void)requestDidProgress:(CGFloat)progress;
//请求完成的回调
- (void)requestDidfinish:(HTTPRequset *)httprequest;
/**
    请求完成的回调
 */
- (void)requestDidError:(NSError *)error;
@end

/**
    请求类
 */
@interface HTTPRequset : NSObject
/**
    网络请求返回数据源
 */
@property(nonatomic,strong) NSData * responseData;
/**
    字符串形式
 */
@property(nonatomic,copy ) NSString * reponseString;
/**
    代理
 */
@property(nonatomic,assign)id<HTTPRequsetDelegate>delegate;
/**
 使用block实现回调下载进程
 */
@property(nonatomic,copy) void(^requestDidProgressBlock)(CGFloat progress);
/**
 使用block实现回调对象
 */
@property(nonatomic,copy) void(^requestDidFinishBlock)(HTTPRequset * request);
/**
 使用block实现回调错误信息
 */
@property(nonatomic,copy) void(^requestDidErrorBlock)(NSError * error);

/**
 构造方法
 */
- (id)initWithUrl:(NSURL *)url;
/**
    开始网络请求
 */
- (void)startRequest;
@end
//
//  HTTPRequset.m
//  请求类分装
//
//  Created by qianfeng on 15-7-26.
//  Copyright (c) 2015年 qq. All rights reserved.
//

#import "HTTPRequset.h"

@interface HTTPRequset ()<NSURLConnectionDataDelegate,NSURLConnectionDelegate>
{
    NSURL * _url;
    //保存下载数据
    NSMutableData * _downloadData;

    //总大小
    long long _fileSizeBytes;
}
@end

@implementation HTTPRequset
- (id)initWithUrl:(NSURL *)url
{
    self = [super init];
    if (self) {

        _url = url;
        _downloadData = [NSMutableData data];
    }
    return self;
}
- (void)startRequest
{
    NSURLRequest * request = [NSURLRequest requestWithURL:_url];
    [NSURLConnection connectionWithRequest:request delegate:self];
}
#pragma mark - 代理方法
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    //清空数据
    _downloadData.length = 0;
    //获取文件总大小
    _fileSizeBytes = [response expectedContentLength];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    //追加
    [_downloadData appendData:data];
    //计算进度
    float progress = (float) _downloadData.length / _fileSizeBytes;
    if ([self.delegate respondsToSelector:@selector(requestDidProgress:)]) {
        [self.delegate requestDidProgress:progress];
    }
    self.requestDidProgressBlock(progress);

}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    //请求取消
    [connection cancel];

    //
    _responseData = _downloadData;
    _reponseString = [[NSString alloc]initWithData:_downloadData encoding:NSUTF8StringEncoding];
    self.requestDidFinishBlock(self);
    if ([self.delegate respondsToSelector:@selector(requestDidfinish:)]) {
        [self.delegate requestDidfinish:self];
    }

}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    //请求取消
    [connection cancel];
    self.requestDidErrorBlock(error);
    if ([self.delegate respondsToSelector:@selector(requestDidError:)]) {
        [self.delegate requestDidError:error];
    }

}

@end
时间: 2024-08-02 11:03:32

简单网络请求封装的相关文章

RN实战项目网络请求封装(二)

RN实战项目网络请求封装(二) 网络相关学习文档,参考 RN中文网文档 RN中主要是用fetch来完成异步网络请求的,传统的ajax慢慢的会被fetch替代 RN中文网fetch API 案例 fetch('https://mywebsite.com/endpoint/', { method: 'POST', //请求方法 默认get headers: { 'Accept': 'application/json', 'Content-Type': 'application/json', //数据

网络请求封装

网络请求封装 // // ASIHTTPRequest+Request.h // CloudShopping // // Created by sixiaobo on 14-7-9. // Copyright (c) 2014年 com.Uni2uni. All rights reserved. // #import "ASIFormDataRequest.h" #import "ASIDownloadCache.h" // downloadData是返回的数据,如

iOS开发——post异步网络请求封装

IOS中有许多网络请求的函数,同步的,异步的,通过delegate异步回调的. 在做一个项目的时候,上网看了很多别人的例子,发现都没有一个简单的,方便的异步请求的封装例子.我这里要给出的封装代码,是异步的,post的请求方式.通过ios的原生函数简单封装.通过这个封装可以方便的访问http服务器,获取数据,也可以容易的异步加载网络图片. 首先新建一个httpHelper类,在这个类里进行封装,封装的函数名称就叫做post,参数有请求的地址url,请求的参数params,返回数据后回调的函数blo

Android项目开发全程(三)-- 项目的前期搭建、网络请求封装是怎样实现的

在前两篇博文中已经做了铺垫,下面咱们就可以用前面介绍过的内容开始做一个小项目了(项目中会用到Afinal框架,不会用Afinal的童鞋可以先看一下上一篇博文),正所谓麻雀虽小,五脏俱全,这在里我会尽量的将前期的项目搭建做的相对实用一些,以便后期可以有效的实现团队协作和项目维护.一开始可能会看起来麻烦些,可能会觉得还不如直接用简单的方式去实现来的方便,磨刀不误砍柴工嘛,要想后期开发效率高一些,前期就不要图省事了. 一个项目肯定不是一蹴而就的,咱们一步一步来,本篇博文先详细介绍项目搭建.通过url地

React Native 网络请求封装:使用Promise封装fetch请求

React Native中虽然也内置了XMLHttpRequest 网络请求API(也就是俗称的ajax),但XMLHttpRequest 是一个设计粗糙的 API,不符合职责分离的原则,配置和调用方式非常混乱,而且基于事件的异步模型写起来也没有现代的 Promise 友好.而Fetch 的出现就是为了解决 XHR 的问题,所以ReactNative官方推荐使用Fetch API.http://blog.csdn.net/withings/article/details/71331726 fet

Flutter -------- Http库 网络请求封装(HttpController)

http库 再次封装的网络请求类 HttpController 1.添加依赖 dependencies: http: ^0.12.0 #latest version 2.导入库 import 'package:http/http.dart' as http; //导入前需要配置 效果图: 封装类 import 'package:http/http.dart' as http; class HttpController { static void get(String url, Function

RxJava2+Retrofit2+RxLifecycle3+OkHttp3网络请求封装(动态演示)

入职公司后,公司要求组件化开发,经过讨论后我将网络请求框架单独进行了封装,不过当时框架里将常用的 util 和 ui 均放入到了共同的 Common 包下,导致里面部分代码耦合,后来为了降低耦合性又将 Common 拆分为了lib_common和lib_ui,但是 lib_ui 依赖了 lib_common,还是导致部分代码耦合,最新一期为了降低组件之间的耦合性,所以单独将 lib_common 中的网络请求单独拆分,并且我又做了新的封装和完善,总之网络框架经过3次大的改造后,使用已经非常稳定了

业务层网络请求封装

网络请求 - 是否异步 - 参数字典 (本身参数 系统环境参数, 默认参数) - 遮罩层 - 报错提示 - url 网络参数类(RequestParam) userid: NSString * entid: NSString * appid: NSString * secret: NSString * paramDict: NSDictionary * + (instancetype) DefaultRequestParam; + (void)setSharedRequestParam; 网络请

swift 动手写网络请求封装(仿照了一个大神的)不用导入第三方

新建一个类Network import UIKit //NSURLSession 的使用过程: // //构造 NSURLRequest //确定 URL //确定 HTTP 方法(GET.POST 等) //添加特定的 HTTP 头 //填充 HTTP Body //驱动 session.dataTaskWithRequest 方法,开始请求 //(5)设置 SSL 证书钢钉.在我们调用 HTTPS 协议的时候,事先把 SSL 证书存到 App 本地,然后在每次请求的时候都进行一次验证,避免中