2015-01-20 2 views
1

Запрос данныхПроблема с IOS HTTP POST

NSDictionary *tmp = @{@"name":@"Kousik",@"age":@"24",@"location":@"bangalore"}; 

NSString *postdata = [NSString stringWithFormat:@"request = %@",tmp]; 

//now postdata is 
//request = { 
    "age" = "24"; 
    "location" = "bangalore"; 
    "name" = "Kousik"; 
} 

, но я хочу, чтобы это NSDictionary должен быть внутри строки, так что в сервере я могу eval его и получить словарь обратно.

Здесь я хочу что-то вроде toString() является java или str() в pyhton.

Это мой запрос Http: -

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
[request setURL:[NSURL URLWithString:path]]; 
[request setHTTPMethod:@"POST"]; 

[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 


    NSError *error; 

    NSData *preparedPostData = [postdata dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 

    NSString *postLength = [NSString stringWithFormat:@"%d", [postdata length]]; 

    [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
    [request setHTTPBody:preparedPostData ]; 


[NSURLConnection sendAsynchronousRequest:request 
            queue:backgroundQueue 
         completionHandler:^(NSURLResponse response,NSData data,NSError *error){ 
          NSString *result = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; 
          if(complect) 
           complect(result,error); 
         } 
]; 

Update

Мой запрос собирается на сервер правильно, но проблема заключается в структуре данных. , когда я пытаюсь получить доступ к данным с помощью ключа request, тогда он дает ошибку, потому что значение для ключа запроса не поддерживается на сервере, так как это значение имеет значение =. Так что я хочу, чтобы правильно создать структуру данных requset. Обязательно отправьте NSDictionary как строку.

PostData должно быть что-то вроде этого

request = "{ 
     age : 24; 
     location : bangalore; 
     name : Kousik; 
    }" 

Я не хочу использовать приложение/JSON.

+0

Ваш код является неполным. – Raptor

+0

@ Raptor обновленный код – Nullify

+0

см. Updtaed answer –

ответ

0
NSString *stringURL = [NSString stringWithFormat:@"name=%@&age=%@&location=%@",@"Kousik",@"24",@"bangalore"]; 

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
    [request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@%@",ServerURL,API_SaveContctListToAddressBook]]]; 
    [request setHTTPMethod:@"POST"]; 
    [request setHTTPBody:[stringURL dataUsingEncoding:NSUTF8StringEncoding]]; 
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 


    // NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; 
    [NSURLConnection sendAsynchronousRequest:request 
             queue:[NSOperationQueue mainQueue] 
          completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { 
           if (!data) { 
            data = [[NSData alloc] init]; 
           } 
           NSDictionary *dic =[ NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&connectionError]; 

           completionHandler(dic, NO); 


          }]; 
+0

My Http requset работает нормально, но проблема заключается в структуре данных запроса. – Nullify

+0

Ваша строкаURL не содержит словарь – Nullify

+0

ДА, непосредственно принимайте все параметры как строку. Его рабочий код –

0

Использование NSJSONSerialization конвертировать словарь в NSData, а затем прикрепить его на HTTPBody

NSData *httpBody = [NSJSONSerialization dataWithJSONObject:dict options:0 error:nil]; 
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
[request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@%@",ServerURL,APIPath]]]; 
[request setHTTPMethod:@"POST"]; 
[request setHTTPBody:httpBody]; 
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
[NSURLConnection sendAsynchronousRequest:request 
            queue:[NSOperationQueue mainQueue] 
         completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { 
//Handling code 
         }]; 
+1

, можно ли использовать приложение/x-www-form-urlencoded? – Nullify

+0

Если вы используете application/x-www-form-urlencoded, вы должны передать все параметры '&', разделенные примерно так: - [NSString stringWithFormat: @ "name =% @ & age =% @ & location =% @" , @ "Kousik", @ "24", @ "Бангалор"]; –

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