【问题标题】:Google App Engine. Google app engine seeing POST requests as a GET谷歌应用引擎。 Google 应用引擎将 POST 请求视为 GET
【发布时间】:2011-12-07 06:18:20
【问题描述】:

我现在遇到了谷歌应用引擎最奇怪的问题。我从 iOS 发送一个 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 中的某些配置吗?

谢谢!

【问题讨论】:

  • 是否有可能对 POST 的响应重定向到 GET?
  • 不确定这将如何发生或如何测试?我没有指示它这样做。有没有办法测试?
  • 一种方法是使用网络上的数据包嗅探器来查看真正发生了什么。这种技术解决了所有可能使问题复杂化的应用程序级别的东西。
  • 呃。是的,看着查尔斯。如果您在非安全尝试中遇到 POST 请求,它会将 302 重定向发送回 https 版本。这可能会作为获取请求被重新发送。

标签: ios google-app-engine post get


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这是不正确的。 GAE 绝对可以接收到非 HTTPS 处理程序的 POST。看我的回答。
    猜你喜欢
    • 2015-05-17
    • 1970-01-01
    • 2023-03-30
    • 2011-05-06
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多