2011-12-07 13 views
2

Google App Engineですぐに異常な問題が発生しています。私はiOSからPOST要求を送信しています.GETハンドラを呼び出す代わりにGoogleのアプリケーションエンジンがあります。Google App Engine POSTリクエストをGETとして表示するGoogle App Engine

私はテストのためにこの1つの状況をサンドボックス化しましたが、それを把握することはできません。私はただリクエストを送信するiOSアプリを持っています。そして私はサービスを除いてGAEのすべてをコメントアウトしました。このサービスはパラメータを記録して返します。

iOSアプリリクエストを送信する方法が2通りありました。どちらも動作しません。

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]; 

マイApp Engineのハンドラ:

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に欠けている設定がいくつかありますか?

ありがとうございます!

+0

POSTに応答してGETにリダイレクトされる可能性はありますか? –

+0

それがどうやって起こるか、それをテストする方法がわからないのですか?私はそれをするように指示していない。それをテストする方法はありますか? – gngrwzrd

+1

1つの方法は、実際に何が起こっているかを見るために、ワイヤでパケットスニファを使用することです。この手法では、問題を複雑にしている可能性があるすべてのアプリケーションレベルのものが削減されます。 –

答えて

0

POSTリクエストをGAEに送信するかどうかわかります。あなたがhttpsでそれを行うことを確認してください。非https試行でリクエストを行うと、要求のhttpsバージョンに302リダイレクトが返されます。しかし、リクエストを送信するために使用しているものが302を正しく処理しない場合、リクエストを間違って再送信する可能性があります。

+0

これは間違っています。 GAEは、HTTPS以外のハンドラにPOSTを確実に受け取ることができます。私の答えを見てください。 –

2

"/ TestParameter"を処理するスクリプトのapp.yamlのエントリを確認します。それは "secure:always"を指定していますか?それが行われ、非セキュア接続を行うと、セキュアバージョンにリダイレクトされます。

この問題を解決するには、HTTPS経由で投稿するか、app.yamlのエントリから「secure:always」を削除します。