いくつかのAPIを備えたサーバーがあり、このAPIをiPadでクライアントとして使用しています。コードは次のとおりです。
NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://***/api/user"]];
req.HTTPMethod = @"put";
req.HTTPBody = data; // it is string data from json dictionary
[NSURLConnection sendAsynchronousRequest:req queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
NSString *userData = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
//...
}];
iPad 3 ではすべて動作していますが、そのコードを iPad 1 でテストしようとすると、エラーが発生します。より具体的には、エラーが発生した場合でもサーバーが JSON のみを返すため、エラーがクライアント側にあるのかサーバー側にあるのかを確認できます。したがって、通常、userData には辞書付きの文字列が含まれている必要があります。
{ "auth": 1, "email":"some@mail.com", "error": 0}
サーバーが返されることがあります(間違った認証データをサーバーに送信しようとすると):
{ "auth": 0, "email":"", "error": 400, "errorMessage":"Bad Request"}
しかし、私がiPad 1で得ているのはhtml文字列です:
<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/1.2.1</center>
</body>
</html>
まったく同じオプション、同じインターネット接続があるため、少し混乱していますが、iPad 1 と iPad 3 の動作は異なります。重要な注意: iPad 1 には iOS 5.1.1 があり、iPad 3 には 6.1 があります。非常に簡単な解決策があるはずですが、わかりません。また、iPad のモデルが実際に問題になるかどうかもわかりません。また、同期リクエストを試しましたが、うまくいきませんでした...