Google App Engine.Google App Engine видит POST-запросы как GET - PullRequest
2 голосов
/ 07 декабря 2011

У меня сейчас самая странная проблема с движком приложений Google. Я отправляю POST-запрос с iOS, и Google App Engine вместо этого вызывает обработчик GET.

Я поставил эту изолированную ситуацию для тестирования и не могу ее выяснить. У меня есть приложение для iOS, которое просто отправляет запрос. И я прокомментировал все о GAE, за исключением службы. Служба только регистрирует параметр и возвращает.

Приложение для iOS, которое я пробовал использовать двумя разными способами для отправки запроса. Ни то, ни другое не работает.

Код iOS:

/*
NSURL * url = [NSURL URLWithString:@"http://beermonster-gngrwzrd.appspot.com/TestParameter"];
ASIFormDataRequest * _fdrequest = [[ASIFormDataRequest alloc] initWithURL:url];
[_fdrequest setPostValue:@"hello" forKey:@"testkey"];
[_fdrequest startAsynchronous];
*/

NSURL * __url = [NSURL URLWithString:@"http://beermonster-gngrwzrd.appspot.com/TestParameter"];
NSMutableURLRequest * __request = [NSMutableURLRequest requestWithURL:__url];
[__request setHTTPMethod:@"POST"];
NSString * post = [NSString stringWithFormat:@"testkey=hello"];
[__request setHTTPBody:[post dataUsingEncoding:NSUTF8StringEncoding]];
[NSURLConnection sendSynchronousRequest:__request returningResponse:nil error:nil];

Обработчик движка My App:

class TestParameter(webapp.RequestHandler):
def post(self):
    logging.debug(self.request.get("testkey"))
    self.response.out.write(self.request.get("testkey"))
    print self.request.get("testkey")
def get(self):
    logging.debug("get")
    logging.debug(self.request.get("testkey"))
    self.response.out.write(self.request.get("testkey"))

Вывод в журналах GAE показывает неверный путь к коду «get».

Есть идеи, почему POST-запросы приходят в GAE как GET? Есть ли какая-то конфигурация в GAE, которую я пропустил?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 08 декабря 2011

Проверьте запись в app.yaml для скрипта, который обрабатывает "/ TestParameter".Указывает ли он «безопасный: всегда»?Если это произойдет, и вы создадите незащищенное соединение, вы получите 302, перенаправляющее на защищенную версию.

Чтобы это исправить, отправьте сообщение через HTTPS или удалите «secure: always» из записи в приложении.YAML.

0 голосов
/ 07 декабря 2011

Из того, что я могу сказать, если вы хотите отправлять POST-запросы в GAE.Убедитесь, что вы делаете это на https.Если вы делаете запрос при попытке не-https, он отправляет обратно перенаправление 302 на версию запроса https.Но если все, что вы используете для отправки запроса, неправильно обрабатывает 302, это может привести к неправильной отправке запроса.

...