1

iPhone アプリから POST を介して Google App Engine の Java サーブレットにパラメータを送信しようとしています。サーバーがローカルで実行されている場合、これは正常に機能しますが、App Engine にデプロイされる場合、パラメーターは常に null です。なんで?

App Engine コード:

String facebookFriendTokens = (String) req.getParameter("facebookFriendTokens");
//running on localhost, facebookFriendTokens works fine, deployed to GAE it's always null
log.warning("Facebook friends = " + facebookFriendTokens);

iPhoneコード:

NSString *urlString = [NSString stringWithFormat:@"%@/new_huddle?access_token=%@", SERVER_URL, [defaults objectForKey:@"FBAccessTokenKey"]];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
NSString *postString = [NSString stringWithFormat:@"facebookFriendTokens=%@&eventDate=%@&placesTokens=%@&name=%@", encodedFriendTokens, encodedDateString, placesQueryStringParm, encodedNameString];
[encodedNameString release];
[encodedDateString release];
[encodedFriendTokens release];
[request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest:request queue: ...

request.getInputStream() を文字列に処理して出力すると、期待どおりに表示されます。そのように文字列を解析する必要がありますか?

また、サーブレット フィルターを配置していますが、それがリクエストを変更している可能性はありますか?

サーバーがリダイレクトを発行しているかどうか疑問に思っているため、後続のリクエストですべての本文データが失われています。現在、これをローカルでテストする作業を行っています。

4

2 に答える 2

1

本体にUrl パラメーター ( access_token) とフォーム パラメーターの両方があるという事実によって、GAE サーブレットの実装が混乱していると思います。

于 2012-06-12T02:27:43.500 に答える
1

問題は、リクエストが https ではなく http に対して行われたときに GAE AppSpot サーバーが行っていたゴースト/非表示のリダイレクトでした。リダイレクト時に新しいリクエストの作成/変更を手動で処理していなかったため、本文と投稿のパラメーターが失われ、サーバーが取得できませんでした。

クライアントで URL を http から https に変更するだけで、問題は解決しました。

于 2012-06-24T13:21:34.843 に答える