2011-12-07 141 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」。