关于 ios:Google App Engine。 Google 应用引擎将 POST 请求视为 GET

Google App Engine. Google app engine seeing POST requests as a GET

我现在在使用 Google 应用引擎时遇到了最奇怪的问题。我正在从 iOS 和谷歌应用引擎发送一个 POST 请求,而不是调用 GET 处理程序。

我已经对这种情况进行了沙盒测试,但无法弄清楚。我有一个只发送请求的 iOS 应用程序。我已经将 GAE 上的所有内容都注释掉了,除了服务。该服务只记录一个参数并返回。

我尝试使用两种不同的方式发送请求的 iOS 应用。都不行。

iOS 代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
/*
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];

我的应用引擎处理程序:

1
2
3
4
5
6
7
8
9
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 配置?

谢谢!


检查 app.yaml 中处理 "/TestParameter" 的脚本的条目。它是否指定了"安全:始终"?如果是这样并且您进行了非安全连接,您将收到 302 重定向到安全版本。

要解决此问题,请通过 HTTPS 发布您的帖子或从 app.yaml 中的条目中删除"安全:始终"。


据我所知,如果您想向 GAE 发送 POST 请求。确保您在 https 上执行此操作。如果您在非 https 尝试上发出请求,它会将 302 重定向发送回请求的 https 版本。但是如果你用来发送请求的任何东西没有正确处理 302\\'s,它可能会错误地重新发送请求。