美文网首页IOS,勤奋共勉
IOS 开发之请求头

IOS 开发之请求头

作者: 岁月煮酒你与狗 | 来源:发表于2017-07-06 17:52 被阅读0次

    之前在公司做了一个关于借款的app ,后台出于安全的考虑 ,给用户权限分了等级, 请求头不同,所能返回的接口数据也不一样,但是这个请求头不是不变的,在用户完成一定的验证和借款后,请求头发生改变( 服务器返回新的请求头)。

    解决方案:我采用NSUserDefaults写入系统文件(大不了 新添加时,删除就是了),

    NSString *Token = JSON[@"data"]; JSON 为返回值(id类型)

    NSUserDefaults *user = [NSUserDefaults standardUserDefaults ];

    [user setObject:Token forKey:@"Token"];

    本以为这么简单就解决了这个问题,天真的我运行就是bug  ,

    登录后依旧不能请求到数据,没办法了只能断点调试了,后来我发现,我在请求时AFHttpClient 创建了一个只调用一次的单例(为了线程安全又装逼,又高大上)

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{};

    这个单例只调用一次,所以我就把它删了,再次执行,依旧没有,但是我退出程序再次运行就可以了,数据拿到了,一点毛病没有。

    最后没有在apple 文档里面找到一个

    - (BOOL)synchronize;

    // -objectIsForcedForKey: returns YES if the value for 'key' is provided by managed preferences (a configuration profile or mcx)(简单说就是立刻马上写入profile)

    因为NSUserDefaults 写入系统文件有一定实效性,就是过一段时间再调用- (BOOL)synchronize;这个方法,所以你要及时存取就必须手动调用这个方法。

    接下来就是添加到请求头了代码如下

    static AFHttpClient *_sharedClient = nil;

    _sharedClient = [[AFHttpClient alloc] initWithBaseURL:[NSURL URLWithString:kBaseURLString]];

    //不设置会报-1060或者会编码有问题

    _sharedClient.responseSerializer = [AFJSONResponseSerializer serializer];

    NSUserDefaults *user = [NSUserDefaults standardUserDefaults];

    [_sharedClient.requestSerializer setValue:[user objectForKey:@"Token"]  forHTTPHeaderField:@"Authorization"];

    [_sharedClient.requestSerializer

    setValue:@"application/x-www-form-urlencoded "

    forHTTPHeaderField:@"Content-type"];

    有什么不对的地方希望大家多提提意见

    ------.开发之路与君共勉之------

    相关文章

      网友评论

        本文标题:IOS 开发之请求头

        本文链接:https://www.haomeiwen.com/subject/eutkhxtx.html