У меня возникла проблема с отправкой JSON на сервер с API REST. Это код, который я использую:
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, как показано выше, доставляло бы серверу?
Любая помощь будет высоко оценена.
P.S. Я бы предпочел не использовать 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)