新浪微博客户端(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);
    }];
    
    
    
    

}
复制代码

 



如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
posted @   夜行过客  阅读(875)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示