使用目标 C 从响应调用服务器和 GET 令牌

Call a server and GET token from response with Objective C

提问人:Fabrizio L. 提问时间:6/7/2021 最后编辑:Fabrizio L. 更新时间:6/8/2021 访问量:55

问:

我正在为我的应用程序创建一个用户必须登录的视图。 所以我必须打电话给我的服务器 2 次:

  • 第一次调用(使用 GET 方法)让我获得包含一个 cookie(名为 XSFR-TOKEN)的响应,我必须提取该 cookie 并在以后用于第二次调用。
  • 第二个(使用 POST 方法)是一个调用,我必须在请求正文(JSON 中)发送几个参数(用户名、密码、client_id和之前获取的令牌)。此调用的响应会将我重定向到一个虚构的 URL。

当我在我的函数中进行第一次调用时,它工作成功,但我无法从 responseString 中提取并保存令牌以供以后使用。

我被困住了,因为我不知道如何继续。 谢谢你帮助我。

    -(void) makeLoginRequest {
    NSLog(@"LoginFirstStepViewController - makeLoginRequest");
    
    // Preparing URL
    NSString *loginURL = SELFBLUE_LOGIN_REDIRECT_OAUTH;
    NSURL *url = [NSURL URLWithString:loginURL];
    
    // Initialize the request
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    
    // Set request method
    [request setHTTPMethod: @"GET"];
     
    NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        if (error) {
            NSLog(@"Error: %@",error);
            NSString *errorMsg = error.userInfo[@"NSLocalizedDescription"];
            errorMsg = (errorMsg) ? errorMsg:NSLocalizedString(@"unexpected_error", nil);
            dispatch_async(dispatch_get_main_queue(), ^{
                [self.view makeToast:errorMsg duration:4.0 position:CSToastPositionCenter];
            });
            return;
        } else {
            NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
            NSLog(@"Response: %@", responseString);
        }
        
        NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
        NSLog(@"makeLoginRequest: %@", response);
        // Status code 200 allows me to continue, otherwise I had an error.
        if (httpResponse.statusCode !=200) {
            NSLog(@"%ld", (long)httpResponse.statusCode);
            [self showMessageAndUnwindForHttpError:httpResponse.statusCode];
            return;
        }
                
        //EXTRACT THE TOKEN
        
        
       //WRITE CODE FOT POST REQUEST

    }];
    [task resume];
    }
json objective-c 解析 获取

评论

0赞 Larme 6/7/2021
和 输出是什么?是JSON吗?XML格式?NSLog(@"Response: %@", responseString);
1赞 Larme 6/7/2021
不相关,但不是 ,更喜欢使用(参见 developer.apple.com/documentation/foundation/nserror/...如果你对默认值感到恼火,至少要直接使用密钥,而不是.error.userInfo[@"NSLocalizedDescription"]error.localizedDescriptionNSLocalizedDescriptionKey@"NSLocalizedDescription"
0赞 Fabrizio L. 6/7/2021
@Larme 这是一个 XML,它返回一行,其中有标记:<input type=“hidden” id=“csrf_token” name=“_csrf” value=“b9be4787-8a01-4569-9446-f2e33e28b1bd”/>我想以某种方式保存。
1赞 Larme 6/7/2021
所以你想知道如何“解析XML”(这是你搜索的关键词)。所以解析它。
0赞 Fabrizio L. 6/7/2021
@Larme 是的,我认为这就是我需要的。对不起,我的语言,但我对编码很陌生,所以我仍在学习如何写作和说话。

答: 暂无答案