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,它可能会错误地重新发送请求。