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];