• 新浪微博客户端(14)-截取回调地址中的授权成功的请求标记,换取access_token


    DJOAuthViewController.m

    #import "DJOAuthViewController.h"
    #import "AFNetworking.h"
    
    
    @interface DJOAuthViewController () <UIWebViewDelegate>
    
    @end
    
    @implementation DJOAuthViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        /* client_id&redirect_uri */
        NSString *client_id = @"249054863";
        NSString *redirect_uri = @"https://www.baidu.com";
        
        UIWebView *webView = [[UIWebView alloc] init];
        webView.frame = self.view.bounds;
        webView.delegate = self;
        
        [self.view addSubview:webView];
        
        NSString *urlString = [NSString stringWithFormat:@"https://api.weibo.com/oauth2/authorize?client_id=%@&redirect_uri=%@",client_id,redirect_uri];
        
        NSURL *url = [NSURL URLWithString:urlString];
        NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
        
        [webView loadRequest:urlRequest];
    
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    
    #pragma mark - webView 代理方法
    
    - (void)webViewDidStartLoad:(UIWebView *)webView {
    //    DJLog(@"webView开始加载");
    
    }
    
    
    - (void)webViewDidFinishLoad:(UIWebView *)webView {
    
    //    DJLog(@"webView结束加载");
    
    }
    
    
    /** 此方法可用于拦截http请求 */
    - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
        NSString *urlString = request.URL.absoluteString;
        DJLog(@"current access url str : %@",urlString);
    
        // 1. 判断当前地址是否是回调地址(https://www.baidu.com/?code=27a3d9fb9bbc5d3c20be9ae8e4331b02)
        NSRange range= [urlString rangeOfString:@"code="];
        if (range.length != 0) { // 是回调地址
            // 2.截取code=后面的参数值
            NSUInteger fromIndex = range.location + range.length;
            NSString *code = [urlString substringFromIndex:fromIndex]; // code 就是授权成功的请求标记
            // 3.使用授权成功的请求标记(code)来换取accessToken
            [self getAccessTokenWithCode:code];
        }
        
        
        
        return YES;
    }
    
    
    
    
    - (void)getAccessTokenWithCode:(NSString *)code {
    
        // 1. 创建请求管理者
        AFHTTPSessionManager *requestManager = [AFHTTPSessionManager manager];
        
        // 2. 配置请求参数
        NSString *urlString = @"https://api.weibo.com/oauth2/access_token"; // 请求授权的access_token URL
        NSMutableDictionary *params = [NSMutableDictionary dictionary];
        params[@"client_id"] = @"249054863";
        params[@"client_secret"] = @"71d5b761bac9f377af3b938f6d89ba85";
        params[@"grant_type"] = @"authorization_code";
        params[@"code"] = code;
        params[@"redirect_uri"] = @"https://www.baidu.com";
        
        // 3. 发送请求
        [requestManager POST:urlString parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            DJLog(@"success responseObject: %@",responseObject);
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
             DJLog(@"failure responseObject: %@",error);
        }];
        
        
        
        
    
    }
  • 相关阅读:
    如何关闭和打开oracle 10g自动收集统计信息功能
    ORA00600:internal error code,arguments
    ORA01033: ORACLE initialization or shutdown in progress
    ORA01652:unable to extend temp segment by num in tablespace name
    ORA01578:Oracle data block corrupted
    ORA03113:endoffile on communication channel
    ORA01650:unable to extend rollback segment NAME by NUM intablespace NAME
    ORA01628:max # of extents num reached for rollback segment num
    C# 项目中的 bin 目录和 obj 目录的区别,以及 Debug 版本和 Release 版本的区别
    管理 Hadoop 集群的5大工具
  • 原文地址:https://www.cnblogs.com/yongdaimi/p/6001824.html
Copyright © 2020-2023  润新知