Google App Engine。 Google应用引擎将POST请求视为GET

时间:2011-12-07 06:18:21

标签: ios google-app-engine post get

我现在正在使用谷歌应用引擎获得最奇怪的问题。我正在发送来自iOS和Google应用引擎的POST请求,而不是调用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];

我的应用引擎处理程序:

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请求会作为GET进入GAE?我错过了GAE中的一些配置吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

检查app.yaml中的条目以查找处理“/ TestParameter”的脚本。它是否指定“安全:始终”?如果确实如此,并且您建立了非安全连接,则会获得302重定向到安全版本。

要解决此问题,请通过HTTPS发布帖子或从app.yaml中的条目中删除“secure:always”。

答案 1 :(得分:0)

我可以告诉您是否要向GAE发送POST请求。确保在https上执行此操作。如果您在非https尝试时发出请求,它会将302重定向发送回请求的https版本。但是,如果您用于发送请求的任何内容无法正确处理302,则可能会错误地重新发送请求。