Получение необработанных данных в API Google App Engine Python - PullRequest
3 голосов
/ 12 февраля 2010

Я пытаюсь получить необработанные данные, отправленные в виде поста в движок Google App, используя self.request.get ('content'), но безуспешно. Возвращается пустым. Я уверен, что данные отправляются с клиента, потому что я проверил другой простой код сервера.

Есть идеи, что я делаю не так? Я использую следующий код на стороне клиента, генерирующий вызов POST (target-c / cocoa-touch)

NSMutableArray *array = [[NSMutableArray alloc] init];
    NSMutableDictionary *diction = [[NSMutableDictionary alloc] init];
    NSString *tempcurrentQuestion = [[NSString alloc] initWithFormat:@"%d", (questionNo+1)];
    NSString *tempansweredOption = [[NSString alloc] initWithFormat:@"%d", (answeredOption)];       

    [diction setValue:tempcurrentQuestion forKey:@"questionNo"];
    [diction setValue:tempansweredOption forKey:@"answeredOption"];
    [diction setValue:country forKey:@"country"];

    [array addObject:diction];
    NSString *post1 = [[CJSONSerializer serializer] serializeObject:array];


    NSString *post = [NSString stringWithFormat:@"json=%@", post1];
    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];  
    NSLog(@"Length: %d", [postData length]);

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

    NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];  
    [request setURL:[NSURL URLWithString:@"http://localhost:8080/userResult/"]];  
    [request setHTTPMethod:@"POST"];  
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];  
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];  
    [request setHTTPBody:postData];
    questionsFlag = FALSE;
    [[NSURLConnection alloc] initWithRequest:request delegate:self];

Код на стороне сервера:

class userResult(webapp.RequestHandler):
def __init__(self):
    self.qNo = 1
def post(self):
    return self.request.get('json')

Ответы [ 2 ]

7 голосов
/ 12 февраля 2010

self.request.get('content') предоставит вам данные, отправленные с именем аргумента 'content'. Если вам нужны необработанные данные, используйте self.request.body.

4 голосов
/ 12 февраля 2010

Попробуйте отправить данные POST с типом содержимого, отличным от application/x-www-form-urlencoded, который используется по умолчанию при отправке формы браузером. Если вы используете другой тип контента, необработанные данные будут в self.request.body, как предложил Wooble.

Если это происходит из формы HTML, вы можете добавить атрибут enctype к элементу <form>, чтобы изменить кодировку, используемую браузером. Попробуйте что-то вроде enctype="application/octet-stream".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...