Git Product home page Git Product logo

zbnetworking's Introduction

Hi there 👋

This is Andi,a rookie iOS developer

✍ Blog & Writing

简书:Andy
掘金:Andy
码云:Andy

📈 GitHub Stats

Andi's GitHub stats

zbnetworking's People

Contributors

suzhibin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

zbnetworking's Issues

你的demo不完整。我这里补充下:

示例代码:【一般的网络请求,只带body参数,最多也就是自定义header】
-(void)networking_messageSecondClassListGET{
NSLog(@"当前是否有网:%d 状态:%ld",[ZBRequestManager isNetworkReachable],(long)[ZBRequestManager networkReachability]);
[DataManager sharedInstance].tag = [ReuseIdentifier stringByAppendingString:NSStringFromSelector(_cmd)];
[RequestTool initConfig];//公共配置、插件机制、证书设置
@weakify(self)
NSDictionary *parameters = @{};
[DDNetworkingAPI requestApi:NSObject.messageSecondClassListGET.funcName
parameters:parameters
successBlock:^(id data) {
@strongify(self)
}failureBlock:^(id data) {
@strongify(self)
}];
}

/// 邀请好友
+(void)userInfoInviteFriendPOST:(id)parameters
successBlock:(MKDataBlock)successBlock{
// NSDictionary *parameterss = @{};
// NSDictionary *headers = @{};

 [ZBRequestManager requestWithConfig:^(ZBURLRequest * _Nullable request) {

     request.server = NSObject.BaseUrl;
     request.url = [request.server stringByAppendingString:NSObject.userInfoInviteFriendPOST.url];
     
     NSLog(@"request.URLString = %@",request.url);
     
     request.methodType = ZBMethodTypePOST;//默认为GET
     request.apiType = ZBRequestTypeRefresh;//(默认为ZBRequestTypeRefresh 不读取缓存,不存储缓存)
     request.parameters = parameters;//与公共配置 Parameters 兼容

// request.headers = headers;//与公共配置 Headers 兼容
request.retryCount = 1;//请求失败 单次请求 重新连接次数 优先级大于 全局设置,不影响其他请求设置
request.timeoutInterval = 10;//默认30 //优先级 高于 公共配置,不影响其他请求设置
if (![NSString isNullString:[DataManager sharedInstance].tag]) {
request.userInfo = @{@"info":[DataManager sharedInstance].tag};//与公共配置 UserInfo 不兼容 优先级大于 公共配置
};//与公共配置 UserInfo 不兼容 优先级大于 公共配置

     {

// request.filtrationCacheKey = @[@""];//与公共配置 filtrationCacheKey 兼容
// request.requestSerializer = ZBJSONRequestSerializer; //单次请求设置 请求格式 默认JSON,优先级大于 公共配置,不影响其他请求设置
// request.responseSerializer = ZBJSONResponseSerializer; //单次请求设置 响应格式 默认JSON,优先级大于 公共配置,不影响其他请求设置

/// 多次请求同一个接口 保留第一次或最后一次请求结果 只在请求时有用 读取缓存无效果。默认ZBResponseKeepNone 什么都不做。使用场景是在 重复点击造成的 多次请求,如发帖,评论,搜索等业务
// request.keepType=ZBResponseKeepNone;
}//一些临时的其他的配置

 }progress:^(NSProgress * _Nullable progress){
     NSLog(@"进度 = %f",progress.fractionCompleted * 100);
 }success:^(id  _Nullable responseObject,
            ZBURLRequest * _Nullable request){
     if (successBlock) {
         successBlock(responseObject);
     }
 }failure:^(NSError * _Nullable error){
     NSLog(@"error = %@",error);
 }finished:^(id  _Nullable responseObject,
             NSError * _Nullable error,
             ZBURLRequest * _Nullable request){
     NSLog(@"请求完成 userInfo:%@",request.userInfo);
 }];

}

能否将下面的代码融合进去?

/// 打印请求体
+(void)printRequestMessage:(NSURLSessionDataTask *)task{

/*
// 请求URL
NSLog(@"请求URL:%@\n",task.originalRequest.URL);

// 请求方式
NSLog(@"请求方式:%@\n",task.originalRequest.HTTPMethod);

// 请求头信息
NSLog(@"请求头信息:%@\n",task.originalRequest.allHTTPHeaderFields);

// 请求正文信息
NSLog(@"请求正文信息:%@\n",[[NSString alloc] initWithData:task.originalRequest.HTTPBody encoding:NSUTF8StringEncoding]);
*/

// 请求响应时间
NSTimeInterval time = [[NSDate date] timeIntervalSinceDate:NSDate.date];
NSLog(@"请求响应时间:%@\n",@(time));
NSLog(@"\n请求URL:%@\n请求方式:%@\n请求头信息:%@\n请求正文信息:%@\n请求响应时间:%@\n",task.originalRequest.URL,task.originalRequest.HTTPMethod,task.originalRequest.allHTTPHeaderFields,[[NSString alloc] initWithData:task.originalRequest.HTTPBody encoding:NSUTF8StringEncoding],@(time));

}

您好,文件上传问题打扰了

1723162198314
您好,像这种带参数的文件上传该怎么处理,我使用methodType=ZBMethodTypeUpload,或是methodType=ZBMethodTypePOST都报error: Error Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: bad request (400)" UserInfo={NSLocalizedDescription=Request failed: bad request (400) 错误,request我是这样配置的:
request.methodType=ZBMethodTypePOST;
request.requestSerializer = ZBJSONRequestSerializer;
request.responseSerializer = ZBJSONResponseSerializer;
request.parameters = @{@"submission_id":@"10"};
[request addFormDataWithName:@"file" fileURL:outFileUrl];
不知道是啥问题,帮忙看看,感激不尽🤝🤝

设置证书验证,程序崩溃

Thread 1: "A security policy configured with AFSSLPinningModeCertificate can only be applied on a manager with a secure base URL (i.e. https)"

具体代码:

/**
 证书设置
 ZBRequestEngine 继承AFHTTPSessionManager,所需其他设置 可以使用[ZBRequestEngine defaultEngine] 自行设置
 */
NSString *name = @"client";
if (name.length>0) {
    // 先导入证书
    NSString *cerPath = [[NSBundle mainBundle] pathForResource:name ofType:@"cer"];//证书的路径
    NSData *cerData = [NSData dataWithContentsOfFile:cerPath];
    AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
    // 如果需要验证自建证书(无效证书),需要设置为YES,默认为NO;
    securityPolicy.allowInvalidCertificates = YES;
    // 是否需要验证域名,默认为YES;
    securityPolicy.validatesDomainName = NO;
    securityPolicy.pinnedCertificates = [[NSSet alloc] initWithObjects:cerData, nil];
    [ZBRequestEngine defaultEngine].securityPolicy = securityPolicy;
}

大佬看到后,可以设置自签名证书尝试复现这个问题。

一些默认参数的设置

每次请求都需要的且固定的参数:token,version(版本号),还有请求响应类型和请求参数类型,这些如果可以一次以后不用重复赋值就好了。

兄弟,又来打扰,感谢开源本框架,有个问题

是这样,发起请求时出现如下错误,服务器使用的是自建证书,我如何信任这个证书,这里该怎么修改好,网上找试了很多方法不行,几乎时发起请求马上就返回这个错误:发生了SSL错误,无法建立与该服务器的安全连接。" UserInfo={NSLocalizedRecoverySuggestion=你仍要连接此服务器吗? ..... 不甚感谢🤝

设置了header 返回400,后台提示缺少参数

直接使用AFN请求,是可以的

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    [manager.requestSerializer setValue:@"Basic NmJfYXBwOg==" forHTTPHeaderField:@"authorization"];
    NSDictionary *params = @{@"username": @"13800010001", @"password": @"11111111", @"grant_type" : @"password"};
    [manager POST:@"http://39.104.78.86:6060/oauth/token" parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog(@"%@",responseObject);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"%@",error);
    }];

用作者框架请求,400错误,后台说少了grant_type参数,代码如下

   [ZBRequestManager requestWithConfig:^(ZBURLRequest *request){
       request.URLString=@"http://39.104.78.86:6060/oauth/token";
       request.methodType = ZBMethodTypePOST;
       request.apiType = ZBRequestTypeRefresh;
       [request setValue:@"Basic NmJfYXBwOg==" forHeaderField:@"authorization"];
       request.parameters = @{@"username": @"13800010001", @"password": @"11111111", @"grant_type" : @"password"};
    }  success:^(id responseObject,apiType type){
        NSDictionary *dataDict = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
        NSLog(@"%@",dataDict);
    } failure:^(NSError *error){
        NSLog(@"%@",error);
        if (error.code==NSURLErrorCancelled)return;
        if (error.code==NSURLErrorTimedOut){
            [self alertTitle:@"请求超时" andMessage:@""];
        }else{
            [self alertTitle:@"请求失败" andMessage:@""];
        }
    }finished:^(id responseObject, apiType type, NSError *error, BOOL isCache) {
        if (isCache==YES) {
            NSLog(@"使用了缓存");self.title=@"使用了缓存";
        }else{
            NSLog(@"重新请求");self.title=@"重新请求";
        }
    }];
}

关于预处理响应

大佬您好,非常感谢您的工具。在预处理响应这块,我想做个 token失效后隐式登录再继续请求上次请求的功能,有些疑问,可否给个大佬您的联系方式再咨询?

post请求直接传递json数据

如题,项目中有的post请求是 要求直接给个json,请问目前框架可以实现不?如果不能,作者可以给个思路吗?

ZBRequestTypeCache 问题

/**
读取缓存: 有缓存,读取缓存--无缓存,重新请求并存储缓存
缓存支持响应数据的格式:ZBJSONResponseSerializer,ZBHTTPResponseSerializer
可以与ZBRequestTypeRefreshAndCache 配合使用
*/

并不会自动重新请求,会一直读取缓存内容,其中 可以与ZBRequestTypeRefreshAndCache 配合使用,是如何处理,是需要手动进行吗

非常棒👍🏻

建议把MJExtension的json转model加入进来,进一步完善。

您好,不好意思再次打扰,+ (void)cancelRequest:(NSUInteger)identifier,取消单个请求这个方法有效果吗?

我这里遇到一个问题是这样,同一个请求多次调用入参不同,请求和返回的数据保存时都需要使用传入参数,上一个请求结果还没有回来,当前请求发起入参时刚好上一个请求结果回来了,保存数据用的当前请求的参数,这样就导致数据错乱,比如入参当前的itemId是2,对应结果应该是2请求回来的数据,结果上一个请求itemId=1 请求的数据回来了,保存数据就把1的数据保存在2下了,我们这个请求返回是不带参数itemId的,所以从返回的结果也不好处理,想了解一下有好的方法处理,感谢🤝

建议URL处理一下,因为零宽空格不可见。我吃了亏

/**
问题:直接其他地方复制过来的中文字进行网页搜索、或者中文字识别排序等情况的,会出现搜索不到的情况。
解决方法:可能存在复制源里面的文字带了空白url编码%E2%80%8B,空白编码没有宽度,虽然看不到但是会影响结果无法正确匹配对应的中文字。可以把文字重新url编码即可。
*/
-(NSString *)urlProtect{
if ([self containsString:@"\u200B"]) {
return [self stringByReplacingOccurrencesOfString:@"\u200B" withString:@""];
}else return self;
}

找不到AF相关类

image
建议用如下方式导入头文件:
#if __has_include(<AFNetworking/AFNetworking.h>)
#import <AFNetworking/AFNetworking.h>
#elif __has_include("AFNetworking.h")
#import "AFNetworking.h"
#elif __has_include("AFNetworking-umbrella.h")
#import "AFNetworking-umbrella.h"
#else
#error "AFNetworking header not found"
#endif

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.