Есть ли способ привязать NSDictionary параметров к NSURLRequest вместо того, чтобы вручную создавать строку?
AFNetworking
позволяет добавить в запрос NSDictionary
параметров, и он добавит их в запрос. Поэтому, если бы я хотел сделать запрос GET
с ?q=8&home=8888
, я бы просто просто сделал NSDictionary, например @{@"q": @"8", @"home": @"8888"}
.
Есть ли способ сделать это с помощью NSURLSession
/NSURLConnection
/NSURLRequest
?
Я знаю, что я могу использовать NSJSONSerialization
для добавления данных JSON, но что, если я просто хочу, чтобы они были как GET
параметры в URL? Должен ли я просто добавить категорию?
Ответы
Ответ 1
Вы можете сделать это, обновив URL-адрес, используя NSURLComponents и NSURLQueryItems. В следующем примере предположим, что параметр URL уже установлен в NSMutableURLRequest. Вы можете изменить его перед использованием, чтобы включить каждый параметр из NSDictionary params
. Обратите внимание, что каждый параметр кодируется до его написания.
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;
Ответ 2
ПОПРОБУЙТЕ НИЖЕ РАБОЧИЙ КОД
// 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 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];
Ответ 3
Пример использования 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];