POST请求iOS:幕后发生了什么?

时间:2018-06-26 17:10:15

标签: ios objective-c nsurlsession nsurl

我面临着一个非常奇怪的问题,希望有人能帮助我了解自三天前以来我所遇到的问题在哪里。

简单地说,我向一个简单的端点发出NSMutableRequest,我在该端点发送(使用POST)一个json,并且应该接收到响应0或1。

该代码在设备上首次运行该应用程序时有效,但是在接下来的几次中它不再起作用。

为更好地说明自己,如果每次卸载并重新安装该应用程序,都会得到正确的响应,但是如果我第二次运行该代码两次,则会从端点收到类似[CSRF验证失败]的信息。此错误意味着我没有发送正确的格式(或者我发送的是奇怪的东西)。

我的问题是:那怎么可能?我有可能要发送其他内容吗?

端点正常工作,因为使用android版本我没有任何问题...

下面是代码,希望有人能向我解释幕后发生的事情以及如何解决这个问题。

    NSString *mail       = [profile valueForKey:@"email"];
NSString *provider   = [profile valueForKey:@"provider"];

// making a GET request to endpoint
NSString *baseUrl = ENDPOINT_URL;

NSString *targetUrl = [NSString stringWithFormat:@"%@", baseUrl];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setHTTPMethod:@"POST"];
[request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request addValue:@"application/json" forHTTPHeaderField:@"Accept"];
NSString *body = [NSString stringWithFormat:@"{\"mail\":\"%@\", \"provider\":\"%@\"}",mail,provider];
NSData *postData=[body dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:postData];
[request setURL:[NSURL URLWithString:targetUrl]];
[request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];


[[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:
  ^(NSData * _Nullable data,
    NSURLResponse * _Nullable response,
    NSError * _Nullable error) {
      if (data){
          NSString *myString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
          NSLog(@"Data received: %@", myString);
          if ([myString isEqualToString:@"[\"CSRF validation failed\"]"]){
              NSLog(@"ENDPOINT ERROR");
              dispatch_async(dispatch_get_main_queue(), ^{
                  [(AppDelegate *)[[UIApplication sharedApplication] delegate] loginAborted];});

          } else {
              NSDictionary* json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
              NSLog(@"Data received: %@", json);
              NSNumber *value = [NSNumber numberWithInt:[[json objectForKey:@"profile_exists"] intValue]];
              if ([value intValue] == 1){
                  //Profile exists.
                  NSLog(@"Profile exists.");
                  [self silentLogin:profile];
              } else if ([value intValue] == 0) {
                  //Profile does not exists.
                  NSLog(@"Profile does not exist.");
                  [self silentRegistration:profile];

              }
              else {
                  //Error.
                  NSLog(@"Error in ENDPOINT VALUE");
                  dispatch_async(dispatch_get_main_queue(), ^{
                  [(AppDelegate *)[[UIApplication sharedApplication] delegate] loginAborted];});
              }
              NSLog(@"%@",json);
          }
      } else {
          NSLog(@"No Data received");
          dispatch_async(dispatch_get_main_queue(), ^{
          [(AppDelegate *)[[UIApplication sharedApplication] delegate] loginAborted];});
      }
  }] resume];

1 个答案:

答案 0 :(得分:0)

我每次提出请求时都能解决删除Cookie的问题。这些cookie似乎每次都被重新发送。

user = self.context['request'].user
company = Company.objects.filter(user=user)

}