Search code examples
iosobjective-cparse-platform

Make a GET request to Parse API in Objective-C


curl -X GET  -H "X-Parse-Application-Id: XYZ"   -H "X-Parse-REST-API-Key: XYZ" -G  --data-urlencode 'where={"col1":"val1", "col2":"val2"}' https://api.parse.com/1/classes/ClassName/

I tried to convert the above curl command to the following code in Objective-C, but to no avail.

responseData = [NSMutableData data];
NSString* classURL = @"https://api.parse.com/1/classes/ClassName/";
NSURL* url = [NSURL URLWithString:classURL];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:APP_ID forHTTPHeaderField:@"X-Parse-Application-Id"];
[request setValue:REST_API_KEY forHTTPHeaderField:@"X-Parse-REST-API-Key"];

NSString *qryString = [NSString stringWithFormat:@"where={\"col1\":\"%@\", \"col2\":\"%@\"}", val1, val2];
[request setHTTPBody:[qryString dataUsingEncoding:NSUTF8StringEncoding]];
NSURLConnection *connection= [[NSURLConnection alloc] initWithRequest:request
                                                             delegate:self];
NSError *error = [[NSError alloc] init];
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]);
    return nil;
}

NSString* resp = [[NSString alloc] initWithData:oResponseData encoding:NSUTF8StringEncoding];
NSLog(resp);

Solution

  • Thanks @walle84. I worked on it for a little while longer and figured out the curl equivalent in Objective-C.

    responseData = [NSMutableData data];
    
    NSString* qryString = [NSString stringWithFormat:@"{\"col1\":\"%@\", \"col2\":\"%@\"}",
                           val1, val2];
    NSString* escapedString = [qryString
                               stringByAddingPercentEncodingWithAllowedCharacters:
                               [NSCharacterSet URLHostAllowedCharacterSet]];
    NSString* classURL = [NSString  stringWithFormat: @"https://api.parse.com/1/classes/ClassName/?where=%@", escapedString];
    NSURL* url = [NSURL URLWithString:classURL];
    
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [request setHTTPMethod:@"GET"];
    [request setValue:APP_ID forHTTPHeaderField:@"X-Parse-Application-Id"];
    [request setValue:REST_API_KEY forHTTPHeaderField:@"X-Parse-REST-API-Key"];
    
    NSError* error = [[NSError alloc] init];
    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]);
        return nil;
    }
    
    NSString* response = [[NSString alloc] initWithData:oResponseData encoding:NSUTF8StringEncoding];