2

私は iOS と AFNetworking の両方が初めてです。私は、Titanium と、Javascript の xhr に似たモデルを使用してデータを投稿および取得する非常に簡単な方法に慣れています。サーバーに Post リクエストを送信すると、JSON が返されます。Titanium では問題なく動作しますが、ネイティブで動作させるには時間がかかります。

Titanium のバックエンドを調べたところ、ASI を使用しているようで、興味深いと思いました。ASIが更新されなくなったため、AFNetworkingが代替のようです。ただし、以下のリクエストを送信すると、JSON レスポンスではなく text/html レスポンスが返されます。パラメータとその送信方法が原因だと思います。

別の StackOverflow の質問で、その人は標準の投稿変数をサーバーに提供する必要があり、サーバーは JSON で応答しました。これはまさに私がする必要があることです。「AFHTTPClientでparameterEncodingをAFFormURLParameterEncodingに設定する」という提案がありましたが、その方法がわかりません。誰かがこの問題を解決するのを手伝ってくれるなら、私は永遠に感謝します. 誰かがこれを理解するのに役立つ場合は、実際の投稿アドレスとダミーのユーザー/パスを提供できます。

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSDictionary *parameters = @{@"username": @"dummyusername",@"password":@"dummypassword"};
NSString *URLString = @"https://www.webaddress.com/index.php?ACT=71";
[manager POST:URLString parameters:parameters constructingBodyWithBlock:^( id<AFMultipartFormData> parameters ){} success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
  NSLog(@"Error: %@", error);
}];
4

3 に答える 3

4

AFNetworking 2.1 ではAFHTTPRequestOperationManager、インスタンス変数としてを作成しviewDidLoad、View Controller (またはオブジェクトのセットアップ メソッド) で初期化し、リクエスト シリアライザーを設定してから、インスタンス変数を介してリクエストを行うことができます。

作業例:

// Creation
-(void)setup {
    url = [NSURL URLWithString:kMediaURLString];

    manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:url];
    manager.requestSerializer = [AFHTTPRequestSerializer serializer];
    manager.responseSerializer = [AFJSONResponseSerializer serializer];
}

...

-(void)makeRequestWithObject:(id)obj {
    // Create your parameters
    NSDictionary *params = @{ @"someParameter" : obj };

    // Create a path (relative to your manager's baseURL)
    NSString *urlString = [NSString stringWithFormat:kCreatePath, postPath];

    // Post the request to urlString with params, handle success or failure
    [manager POST:urlString
       parameters:params
          success:^(AFHTTPRequestOperation *operation, id success){
              // Do stuff on success
          }failure:^(AFHTTPRequestOperation *operation, NSError *error) {
              // Do stuff on failure
          }];
}
于 2013-11-04T03:42:39.463 に答える
-1

このように AFNetworking を使用できます。

AFHTTPClient *httpClient = [[AFHTTPClient alloc] init];
NSDictionary *parameter = @{@"username":@"dummyusername", @"password":@"dummypassword"};
[httpClient setParameterEncoding:AFJSONParameterEncoding];
[httpClient registerHTTPOperationClass:[AFJSONRequestOperation class]];

[httpClient postPath:@"https://www.webaddress.com/index.php?ACT=71" parameters:parameter success:^(AFHTTPRequestOperation *operation, id responseObject) {
// Print the response body in text
BOOL *success = [[responseObject objectForKey:@"success"] boolValue];
NSLog(@"Response: %@",responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
[self handleConnectionError:error];
}];
于 2013-11-04T03:33:19.177 に答える