NSURLRequest POST для движка приложения Google?

В настоящее время я изучаю GAE (Python) и пытаюсь отправлять запросы POST из приложения iPhone.

Отправка с помощью метода GET работает нормально, но просто не работает, когда я использую метод POST.

Вот серверная часть:

class echoHandler(webapp.RequestHandler):
    def get(self):
        password = self.request.get("password")
        if password == "ping":
            self.response.out.write("pong")
        else:
            self.response.out.write("erreur de password")

    def post(self):
        password = self.request.get("password")
        if password == "ping":
            self.response.out.write("pong")
        else:
            self.response.out.write("erreur de password")

и на стороне клиента:

NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://myapp.appspot.com/echo"]];
    NSMutableURLRequest *maRequete = [NSMutableURLRequest requestWithURL:url];

    [maRequete setHTTPMethod:@"POST"];
    NSString *essaiMdp = @"password=ping";
    [maRequete setHTTPBody:[essaiMdp dataUsingEncoding:NSUTF8StringEncoding]];
    //[maRequete setValue:[NSString stringWithFormat:@"%d",[essaiMdp length]] forHTTPHeaderField:@"Content-Length"];
    //[maRequete setValue:@"text/html" forHTTPHeaderField:@"Content-Type"];
    //[maRequete setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];

    NSURLResponse *reponse;
    NSError *erreur;

    NSData *donneesPOST = [NSURLConnection sendSynchronousRequest:maRequete returningResponse:&reponse error:&erreur];

    if (donneesPOST) {
        NSString *strResultat = [[NSString alloc] initWithData:donneesPOST encoding:NSUTF8StringEncoding];
        NSLog(@"reponse recue !");
        NSLog(strResultat);
        resultat.text = strResultat;

    }
    else {
        if (erreur) {
            NSLog(@"erreur lors de la requete HTTP:%@", url);
            NSLog(@"erreur: %@", [erreur localizedDescription]);

        }
    }

Странно то, что все работает на локальном хосте, но когда я развертываю приложение в Интернете, метод POST перестал работать.

Есть идеи ? Спасибо !


person Paraita    schedule 17.01.2011    source источник
comment
"Перестал работать" как? Что вы видите на стороне клиента? В логах на сервере? Вы добавили код отладки на сервер, чтобы определить, что на самом деле отправляется?   -  person Nick Johnson    schedule 18.01.2011
comment
извините за недоразумение, я говорил, что метод POST, похоже, не вызывается (на стороне сервера), когда это приложение развернуто в Интернете (Google App Engine). Что касается кода отладки, локально SDK Google App Engine может помочь вам отладить его, но когда вы его развернете, я не знаю, смогу ли я это сделать. Я пытался вручную отправлять http-запросы с помощью Telnet, и я получаю ошибку 400 (неверный URL-адрес), хотя локально это работает...   -  person Paraita    schedule 19.01.2011
comment
Я тоже вижу эту проблему. У меня есть еще более простая настройка песочницы, и запросы POST терпят неудачу. Вы когда-нибудь решали это? Пока у меня еще не заработало.   -  person gngrwzrd    schedule 07.12.2011
comment
У меня сейчас тоже такая проблема! Любые обходные пути?   -  person Andy Obusek    schedule 13.06.2012


Ответы (2)


Есть ли вероятность, что ваш сервер настроен на перенаправление запросов, которые не заканчиваются косой чертой, на тот, который заканчивается? Другими словами, возможно, http://myapp.appspot.com/echo перенаправляет на http://myapp.appspot.com/echo/, а перенаправление всегда является GET.

person Daniel Roseman    schedule 17.01.2011
comment
Я думаю, что ваши сотрудники werservice используют метод get вместо метода запроса - person GhostRider; 17.01.2011
comment
Приложение на стороне сервера отлично работает локально, но метод POST не будет вызываться при его развертывании в GAE. Я думаю, вы правы, похоже, что это связано с перенаправлением :/. Я попробую добавить заголовок Host в http-запрос (он работает с Telnet) - person Paraita; 19.01.2011

Если вы отправляете запрос POST в Google App Engine, измените URL-адрес на «https» «http://myapp.appspot.com/echo" на "https://myapp.appspot.com/echo" .

Из того, что я испытал, отправка URL-адреса «не https» в Google App Engine вызывает перенаправление.

person Ashmit Bhui    schedule 08.01.2014