ios objective-c nsurlconnection nsurlrequest nsurlsession

ios - ¿Hay alguna manera de adjuntar un NSDictionary de parámetros a un NSURLRequest en lugar de hacer manualmente una cadena?



objective-c nsurlconnection (3)

AFNetworking permite agregar un NSDictionary de parámetros a una solicitud, y los agregará a la solicitud. Entonces, si quisiera hacer una solicitud GET con ?q=8&home=8888 , simplemente haría un NSDictionary como @{@"q": @"8", @"home": @"8888"} muy simple.

¿Hay alguna manera de hacer esto con NSURLSession / NSURLConnection / NSURLRequest ?

Sé que puedo usar la NSJSONSerialization para NSJSONSerialization datos JSON, pero ¿qué NSJSONSerialization si los quiero como parámetros GET en la URL? ¿Debo añadir una categoría?


Ejemplo usando NSURLSession:

NSURLSession *session = [NSURLSession sharedSession]; //populate json NSDictionary *gistDict = @{@"files":@"test",@"description":@"test"}; NSError *jsonError; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:gistDict options:NSJSONWritingPrettyPrinted error:&jsonError]; //populate the json data in the setHTTPBody:jsonData NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://yourURL"]]; [request setHTTPMethod:@"POST"]; [request setHTTPBody:jsonData]; //Send data with the request that contains the json data [[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { // Do your stuff... }] resume];


Puede hacer esto actualizando la url usando NSURLComponents y NSURLQueryItems. En el siguiente ejemplo, suponga que el parámetro de URL ya se ha establecido en un NSMutableURLRequest. Puede modificarlo antes de usarlo para incluir cada parámetro de los parámetros NSDictionary. Tenga en cuenta que cada parámetro se codifica antes de que se escriba.

NSURLComponents *url = [[NSURLComponents alloc] initWithURL:request.URL resolvingAgainstBaseURL:YES]; NSMutableArray *queryItems = NSMutableArray.new; [params enumerateKeysAndObjectsUsingBlock:^(NSString *name, NSString *value, BOOL *stop) { [queryItems addObject:[NSURLQueryItem queryItemWithName:name value:[value stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLQueryAllowedCharacterSet]]]; }]; url.queryItems = queryItems; request.URL = url.URL;


PRUEBA ABAJO EL CÓDIGO DE TRABAJO

// Create the request. NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"YOUR URL"]]; // Specify that it will be a POST request request.HTTPMethod = @"POST"; // This is how we set header fields [request setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; // Convert your data and set your request''s HTTPBody property NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"44",@"UserId",@"0",@"NewsArticleId",@"",@"Date", nil]; NSData* jsonData = [NSJSONSerialization dataWithJSONObject:dict options:0 error:nil]; request.HTTPBody = jsonData; // Create url connection and fire request NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];