2011-12-07 99 views
2

我现在正在用Google应用引擎发现最奇怪的问题。我从iOS和谷歌应用程序引擎发送POST请求,而不是调用GET处理程序。Google App Engine。 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日志显示 “得到” 的代码路径是不正确的。

为什么POST请求会作为GET进入GAE的任何想法?我错过了GAE中的一些配置吗?

谢谢!

+0

是否有可能对POST进行重定向至GET的响应? –

+0

不知道如何发生或如何测试?我没有指示它这样做。有没有办法测试? – gngrwzrd

+1

一种方法是在线路上使用数据包嗅探器来查看真正发生的事情。这种技术可以彻底解决所有可能使问题复杂化的应用程序级别的问题。 –

回答

0

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

+0

这是不正确的。 GAE肯定可以收到一个POST到非HTTPS处理程序。看到我的答案。 –

2

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

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