1

POSTデータをサーバーに送信してMySQLデータベースにデバイスを登録し、通知などを送信できるようにするiPhoneアプリを持っています。一意の識別子、デバイス名、トークン、およびパスワードやユーザー名などの他のいくつかの小さなものを POST 要求としてサーバーに送信します。問題は、サーバーがデータを受信しない場合があることです。つまり、POST 入力に対して空白の値を受け取るだけでなく、投稿データをまったく受け取っていないということです。サーバーへのすべての POST 入力をいくつかのログ ファイルに記録しています。デバイスからの POST データに依存するスクリプトが失敗すると (データが検出されない)、POST データが送信されていないことが原因であることに気付きます。これは、データや何かを拒否するなど、サーバー上の問題ですか、それともクライアント側にある必要がありますか? 何が原因でしょうか?

iPhoneコード:

NSString *post = [NSString stringWithFormat:@"deviceIdentifier=%@&deviceToken=%@",deviceIdentifier,deviceToken]; 
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:NO];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]]; 
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 
[request setURL:[NSURL URLWithString:@"http://website.com/RegisterScript.php"]]; 
[request setHTTPMethod:@"POST"]; 
[request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
[request setValue:@"MyApp-V1.0" forHTTPHeaderField:@"User-Agent"];
[request setHTTPBody:postData]; 
NSData *urlData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
NSString *response = [[NSString alloc] initWithData:urlData encoding:NSASCIIStringEncoding]; 
4

1 に答える 1

1

httpを介して通信するための優れたフレームワークであるASIHTTPRequestを使用することをお勧めします。通信は非同期で処理されるため、通信に時間がかかってもアプリがiPhoneOSによって停止されるリスクはありません。送信するフォームデータを簡単に作成する方法もあります。

于 2010-03-07T08:50:21.940 に答える