2013-04-12 2 views
0

Я разрабатываю приложение для iPhone, и я застрял в одном вызове, мне нужно отправить данные через POST, веб-программист django сообщает мне, что приложение должно получатьНе удается отправить данные с объектива-c через POST

param_one = request.POST['param_one'] 
param_two = request.POST['param_two'] 

, но я не могу сделать это, чтобы отправить любые данные ...

Я учусь Objective-C, поэтому, пожалуйста, не могли бы вы сказать мне, как сделать это с примером?

PS: все другие вызовы, которые не посылают никаких данных или передавать данные через URL (GET метод) работает отлично, так что я делаю подключение правильно

Вот код, я использую:

NSMutableDictionary *dict = [NSMutableDictionary dictionary]; 
[dict setObject:@"somename" forKey:@"user"]; 
NSString *jsonString = [dict JSONRepresentation]; 
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; 
NSMutableURLRequest *  request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://web.com/custom/url/call/"]]; 
[request setValue:jsonString forHTTPHeaderField:@"json"]; 
[request setHTTPMethod:@"POST"]; 
[request addValue:csrf forHTTPHeaderField:@"X-CSRFToken"]; 
[request setHTTPBody:jsonData]; 
senddata = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 

ответ

1

вы, вероятно, следует добавить:

[request setValue:@"application/json; charset=UTF-8" forHTTPHeaderField:@"Content-Type"]; 

Затем сервер будет знать, что вы отправляете это UTF-8 кодируются в формате JSON, и он будет в состоянии разобрать его соответствующим образом. В противном случае он просто получает бесформенное количество данных.

Если это не для целей отладки, очень странно, что вы помещаете строку JSON в заголовок и тело.

+0

Спасибо Томми, что-то странное продолжает со мной, может быть, вы знаете, почему. Если я добавлю «/» в конце URL-адреса, я получаю это сообщение:

Причина, по которой выдается сообщение:

    CSRF token missing or incorrect.    
Вы знаете, почему? – Sascuash

+0

Я недостаточно осведомлен, чтобы быть полностью уверенным в том, как Django обрабатывает токен подделки подпрограммы (CSRF); если ваш парень-сервер ожидает, что он будет работать через файлы cookie, убедитесь, что вы сделали вызов типа '[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy: NSHTTPCookieAcceptPolicyAlways];' и механизмы запроса HTTP для iOS поймают, сохранят и затем присоединяют к ним соответствующие файлы cookie , – Tommy

+0

@Sascuash Значок CSRF Django подробно объясняется в документах Django. В принципе, вы должны делать то, что предлагает Томми, и искать токен CSRF в файле cookie и возвращать его в свой запрос. Django Csrf Middleware ищет этот токен для любых небезопасных HTTP-запросов, одним из которых является POST. – ZachS

Смежные вопросы