У меня проблема с отправкой JSON на сервер с REST API.Вот код, который я использую:
NSString *jsonPostBody = [NSString stringWithFormat:@"'json' = '{\"user\":{\"username\":"
"\"%@\""
",\"password\":"
"\"%@\""
"}}'",
[username stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],
[password stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSData *postData = [jsonPostBody dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
NSString *apiPathParams = [NSString stringWithFormat:@"%@",
@"getUser"
];
NSURL *url = [NSURL URLWithString:[[apiPath retain] stringByAppendingString:apiPathParams]];
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url
cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
timeoutInterval:180.0];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:postData];
NSString* postDataLengthString = [[NSString alloc] initWithFormat:@"%d", [postData length]];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:postDataLengthString forHTTPHeaderField:@"Content-Length"];
[self internalRequest:request];
Вот как бы выглядел API, если бы это была HTML-форма:
<form method="post" action="someAPI-URL">
<input name="json" value="{"user":...}" />
</form>
Вот так выглядят мои данные POST, когдая добавляю его в запрос:
json={"user":{"username":"someUser","password":"somePassword"}}
По причине, по которой я не знаю, данные POST не поступают на сервер.Я сделал что-то не так с форматированием dataString?Как именно я должен отформатировать мою dataString так, чтобы она соответствовала String, а форма, как показано выше, доставляла бы на сервер?
Любая помощь будет высоко оценена.
PS Я бы предпочел не использовать ASIHttpRequestТак как я принял проект от кого-то другого, все остальные запросы работают нормально, кроме этого пост-запроса.Таким образом, изменение всей этой массы на другую инфраструктуру соединений может занять очень много времени.
Вот исходный код метода InternalRequest
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:req delegate:self];
NSMutableDictionary *di = [NSMutableDictionary dictionaryWithObject:[[NSMutableData alloc] init] forKey:@"receivedData"];
[di setObject:[NSString stringWithFormat:@"%i",identifier] forKey:@"identifier"];
if (delegate == nil)
{
delegate = self;
}
[di setObject:delegate forKey:@"delegate"];
CFDictionaryAddValue(connectionToInfoMapping, connection, di)