1

簡単な POST リクエストを実行しようとしています。ただし、Chrome の POSTMAN プラグインと iOS シミュレーターでは結果が異なるようです。

POSTMAN からのスナップショットは次のとおりです。

ここに画像の説明を入力

ここに画像の説明を入力

ご覧のとおり、返された JSON データを取得します。

POST リクエストを実行するコードは次のとおりです。

    NSError *error;
    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
    NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];
    NSURL *url = [NSURL URLWithString:kPostURL];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
                                                           cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                       timeoutInterval:60.0];

    [request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [request addValue:@"application/json" forHTTPHeaderField:@"Accept"];

    [request setHTTPMethod:@"POST"];


    NSString *params =[[NSString alloc] initWithFormat:@"fname=%@&lname=%@&email=%@&password=%@&switchid=%d&didflag=%@",fname,lname,email,pass,switchid,flag];

    [request setHTTPBody:[params dataUsingEncoding:NSUTF8StringEncoding]];
    NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

        NSLog(@"response is %@",response);
        NSLog(@"erros is %@",error);

        NSMutableDictionary * innerJson = [NSJSONSerialization
                                           JSONObjectWithData:data options:kNilOptions error:&error
                                           ];
        NSLog(@"JSON data is %@",innerJson);

    }];

    [postDataTask resume];

そして、デバッガーで値を出力しようとすると、

JSONとしてnullNSDataとして0 bytes。しかし、私status code as 200は成功したものを手に入れました。

ここに私が得る応答があります:

      { status code: 200, headers {
    Connection = "Keep-Alive";
    "Content-Length" = 0;
    "Content-Type" = "text/html";
    Date = "Thu, 25 Feb 2016 02:04:02 GMT";
    "Keep-Alive" = "timeout=5";
    Server = "Apache/2.4.12";
    "X-Powered-By" = "PHP/5.5.30";
} }

NSData が 0 バイトになるのはなぜですか?

4

1 に答える 1

2

クロムのリクエストでは、パラメーターを URL パラメーターとして持っています。ObjC バージョンでは、投稿の一部としてパラメーターを追加しています。

本体の一部としてパラメーターを追加する代わりに:

[request setHTTPBody:[params dataUsingEncoding:NSUTF8StringEncoding]];

クエリの一部として追加します。

NSURL *url = [NSURL URLWithString:[kPostURL stringByAppendingFormat:@"?%@", params]];
于 2016-02-25T02:23:34.653 に答える