Search code examples
objective-cjsonnsurlsessionnsurlnsurlrequest

JSON parsing using NSURL with authorization


In the following code JSONparsing method is working fine , but when I am changing url in odataJsonParsing method with: http://192.168.1.37:8000/sap/opu/odata/sap/ZGW_BANK_DATA_SRV/BankSet? $filter=(BankCtry%20eq%20%27IN%27)&$format=json unable to load the data, it is showing Nil, but same method is working fine for remaining urls, can any one suggest me where I went wrong.

 **Condition**: In odataJsonParsing method have authorization credentials like.


 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: [NSURL           URLWithString:@"http://192.168.1.37:8000/sap/opu/odata/sap/ZGW_BANK_DATA_  SRV/BankSet?$filter=(BankCtry%20eq%20%27US%27)&$format=json"]]; 
    [request setHTTPMethod: @"GET"  ];
    // [request setHTTPBody:self.requestData];
     [request setValue:@"XXXXXXX" forHTTPHeaderField:@"username"];
     [request setValue:@"XXXXXXX" forHTTPHeaderField:@"password"];
     [request setValue:[[NSUserDefaults             standardUserDefaults]valueForKey:@"Auth"]     forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json"   forHTTPHeaderField:@"Content-Type"]; 
    -----------------------------------------------------------------
   -(void )JSONParsing
  {
    NSError *error;
    //--------------------------URLS----------------------------//
   //http://api.geonames.org/citiesJSON? north=44.1&south=-9.9&east=-22.4&west=55.2&lang=de&username=demo

   //http://api.kivaws.org/v1/loans/search.json?status=fundraising

      //http://192.168.1.37:8000/sap/opu/odata/sap/ZGW_BANK_DATA_SRV/BankSet?  $filter=(BankCtry%20eq%20%27IN%27)&$format=json

   //http://jsonplaceholder.typicode.com/posts

   NSURL *url=[NSURL      URLWithString:@"http://jsonplaceholder.typicode.com/posts"];

   NSData  *jsonData=[[NSData alloc] initWithContentsOfURL:url];

   if(jsonData!=nil){
       NSDictionary *jsonArray=[NSJSONSerialization      JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers    error:&error];
      NSLog(@"%@",jsonArray);
    }

    } 

    -(void)oDataJsonParsing
   {
     NSError *error;
   NSData *jsonData=[[NSData alloc] initWithContentsOfURL:[NSURL     URLWithString:@"http://192.168.1.37:8000/sap/opu/odata/sap/ZGW_BANK_DATA_    SRV/BankSet?$filter=(BankCtry%20eq%20%27IN%27)&$format=json"]];

   NSDictionary *dic=[NSJSONSerialization JSONObjectWithData:jsonData   options:NSJSONReadingMutableContainers error:&error];
   NSLog(@"%@",dic);
   }

Solution

  • NSURL *url = [NSURL URLWithString:@"http://192.168.1.37:8000/sap/opu/odata/sap/ZGW_BANK_DATA_SRV/BankSet?$filter=(BankCtry%20eq%20%27CH%27)&$format=json"];
     NSMutableURLRequest *request= [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:120.0];
    
    NSString *authStr = [NSString stringWithFormat:@"%@:%@", @"abaper", @"initial@xyz"];
    NSData *authData = [authStr dataUsingEncoding:NSUTF8StringEncoding];
    NSString *authValue = [NSString stringWithFormat:@"Basic %@", [authData base64EncodedStringWithOptions:0]];
    
    [request setValue:authValue forHTTPHeaderField:@"Authorization"];
    NSError *error ;
    NSHTTPURLResponse *responseCode = nil;
    
    NSData *oResponseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&responseCode error:&error];
    if([responseCode statusCode] != 200)
    {
    
        NSLog(@"Error getting %@, HTTP status code %li", url, (long)[responseCode statusCode]);
    
    }
    else{
        NSDictionary *responsedata = [NSJSONSerialization JSONObjectWithData:oResponseData options:NSJSONReadingAllowFragments error:&error];
    
        NSLog(@"%@",response data);
    
       }