2011-01-17 16 views
2

私は現在GAE(Python)を調べており、iPhoneアプリケーションからPOSTリクエストを送信しようとしています。Google App EngineへのNSURLRequest POST?

GETメソッドで送信すると正常に動作しますが、POSTメソッドを使用すると失敗します。

ここでは、サーバー側です:

class echoHandler(webapp.RequestHandler): 
    def get(self): 
     password = self.request.get("password") 
     if password == "ping": 
      self.response.out.write("pong") 
     else: 
      self.response.out.write("erreur de password") 

    def post(self): 
     password = self.request.get("password") 
     if password == "ping": 
      self.response.out.write("pong") 
     else: 
      self.response.out.write("erreur de password") 

と、クライアント側で:

NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://myapp.appspot.com/echo"]]; 
    NSMutableURLRequest *maRequete = [NSMutableURLRequest requestWithURL:url]; 

    [maRequete setHTTPMethod:@"POST"]; 
    NSString *essaiMdp = @"password=ping"; 
    [maRequete setHTTPBody:[essaiMdp dataUsingEncoding:NSUTF8StringEncoding]]; 
    //[maRequete setValue:[NSString stringWithFormat:@"%d",[essaiMdp length]] forHTTPHeaderField:@"Content-Length"]; 
    //[maRequete setValue:@"text/html" forHTTPHeaderField:@"Content-Type"]; 
    //[maRequete setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"]; 

    NSURLResponse *reponse; 
    NSError *erreur; 

    NSData *donneesPOST = [NSURLConnection sendSynchronousRequest:maRequete returningResponse:&reponse error:&erreur]; 

    if (donneesPOST) { 
     NSString *strResultat = [[NSString alloc] initWithData:donneesPOST encoding:NSUTF8StringEncoding]; 
     NSLog(@"reponse recue !"); 
     NSLog(strResultat); 
     resultat.text = strResultat; 

    } 
    else { 
     if (erreur) { 
      NSLog(@"erreur lors de la requete HTTP:%@", url); 
      NSLog(@"erreur: %@", [erreur localizedDescription]); 

     } 
    } 

奇妙な何かが、すべてがローカルホストで動作しますが、私はインターネット上でアプリケーションを展開するときに、POSTメソッドということです動作を停止。

どうも !

+0

「停止した作業」はどうですか?あなたはクライアント側で何を見ますか?サーバー上のログには?サーバーにデバッグコードを追加して実際に何が送信されたのかを判断しましたか? –

+0

申し訳ありませんが、このアプリがインターネット(Google App Engine)にデプロイされているときに、POSTメソッドが呼び出されていないように見える(サーバー側)ようです。デバッグコードについては、Google App Engine SDKがローカルでデバッグするのに役立ちますが、デプロイする際にはまだ実行できるかどうかわかりません。私は手動でTelnetを使用してHTTPリクエストを送信しようとしていましたが、ローカルで動作していましたが、400エラー(不正なURL)でした... – Paraita

+0

私もこの問題を抱えています。私はさらに簡単なサンドボックスのセットアップとPOST要求が失敗している。あなたはこれを解決したことがありますか?これまで私はまだそれを働かせていない。 – gngrwzrd

答えて

0

サーバーがスラッシュで終わらないリクエストをリダイレクトするように設定されている可能性はありますか?つまり、http://myapp.appspot.com/echohttp://myapp.appspot.com/echo/にリダイレクトされ、リダイレクトが常にGETになっている可能性があります。

+0

私はあなたのwerservice perosn useメソッドの代わりにメソッドを取得すると思う – GhostRider

+0

サーバー側のアプリケーションはローカルで正常に動作しますが、POSTメソッドはGAEに展開されたときに呼び出されません。あなたが正しいと思う、それはリダイレクト関連のようだ:/。 httpリクエストにHostヘッダーを追加しようとします(Telnetで動作します) – Paraita