Response is not coming from server using NSurlSession

139 views Asked by At

Hi i am very new for ios and in my app i have used ASIFormDataRequest earlier days for integrating the services

now i have changed format and i am using NSURLSession instead of ASIFormDataRequest

But when i request change password to server using ASIFormDataRequest success response is coming from server but when i use NSURLSession failed response coming from server please help what is wrong

NSURlsession:-

def = [NSUserDefaults standardUserDefaults];
 NSString *myString = [def stringForKey:@"AccesToken"];
 NSString *AccessToken = [NSString stringWithFormat:@"Bearer %@",myString];

 NSString *Finalstr = [NSString stringWithFormat: @"MedicaidId=%@&OldPassword=%@&NewPassword=%@&ConfirmPassword%@", medicaId,self.CurPwdTxt.text,self.NewPwdTxt.text,self.ConfPwdTxt.text];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:mainurl,BaseURL]]

                                                           cachePolicy:NSURLRequestUseProtocolCachePolicy

                                                       timeoutInterval:60.0];

    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
    [request setHTTPMethod:@"POST"];
    [request setHTTPBody:[Finalstr dataUsingEncoding:NSUTF8StringEncoding]];
    [request addValue:AccessToken forHTTPHeaderField:@"Authorization"];

    NSURLSessionTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {


        if (error) {

            NSLog(@"dataTaskWithRequest error: %@", error);
        }

        else if ([response isKindOfClass:[NSHTTPURLResponse class]]) {

            NSInteger statusCode = [(NSHTTPURLResponse *)response statusCode];

            if (statusCode != 200) {

                NSError *parseError;
                id responseObject = [NSJSONSerialization JSONObjectWithData:data options:0 error:&parseError];

                 NSLog(@"responseobject is %@",responseObject);

            }else{

                NSError *parseError;

                id responseObject = [NSJSONSerialization JSONObjectWithData:data options:0 error:&parseError];

                NSLog(@"else condtion");

                if (!responseObject) {

                    NSLog(@"JSON parse error: %@", parseError);

                    NSLog(@"responseobject is%@",responseObject);

                } else {


                    NSLog(@"responseobject is %@",responseObject);

                }

                //if response was text/html, you might convert it to a string like so:

                NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"final responseString = %@", responseString);
            }
        }
    }];

    [task resume];
}

ASIFormDataRequest:-

NSString *urlStr = [NSString stringWithFormat:@"myurl",BaseURL];
    NSLog(@"urlStr --->>> %@",urlStr);

    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:urlStr]];
    [request setRequestMethod:@"POST"];

    def = [NSUserDefaults standardUserDefaults];
    NSString *myString = [def stringForKey:@"AccesToken"];

    NSString *str = [NSString stringWithFormat:@"Bearer %@",myString];
    NSLog(@"token is %@",str);

    [request setPostValue:medicaId forKey:@"MedicaidId"];
    [request setPostValue:self.CurPwdTxt.text forKey:@"OldPassword"];
    [request setPostValue:self.NewPwdTxt.text forKey:@"NewPassword"];
    [request setPostValue:self.ConfPwdTxt.text forKey:@"ConfirmPassword"];
    [request addRequestHeader:@"Authorization" value:str];

    [request setDelegate:self];
    [request startAsynchronous];
1

There are 1 answers

4
Tobi Nary On

You are sending different requests there. In the 'new' code, you are constructing the POST data like this:

@"MedicaidId=%@&OldPassword=%@&NewPassword=%@&ConfirmPassword%@"

which looks like GET-parameters more than form-encoding (which you use on the 'old' request).

Tracking your request and checking out the actual request using something like Wireshark might help you out to spot the problem yourself next time.