Ios Postman给出了一个成功的响应,而相同的API在通过代码调用时抛出错误

Ios Postman给出了一个成功的响应,而相同的API在通过代码调用时抛出错误,ios,objective-c,postman,nsurlconnection,Ios,Objective C,Postman,Nsurlconnection,当我在代码中调用POST API时,POST API抛出错误,而通过postman给出成功响应。我使用相同的方法调用其他服务,它们工作得很好。问题在于这个特定的API。以下是我用于调用API的代码: -(void)createNSUrlSessionLogin:(NSURL*)URL postDict:(NSDictionary*)dict successBlock:(completionBlock)completionBlock failureBlock:(fail

当我在代码中调用POST API时,POST API抛出错误,而通过postman给出成功响应。我使用相同的方法调用其他服务,它们工作得很好。问题在于这个特定的API。以下是我用于调用API的代码:

-(void)createNSUrlSessionLogin:(NSURL*)URL postDict:(NSDictionary*)dict successBlock:(completionBlock)completionBlock
              failureBlock:(failureBlock)failure
{
NSError *error;
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:nil delegateQueue:nil];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
[request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPMethod:@"POST"];
NSData *postData = [NSJSONSerialization dataWithJSONObject:dict options:0 error:&error];
[request setHTTPBody:postData];
NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
    if ([data length] > 0 && error == nil)
    {            
        NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
        NSLog(@"result json: %@", jsonArray);
        if (!jsonArray) {
            failure(NO,nil);
        }else
        {
            completionBlock(YES,jsonArray);
        }

    }

    else if ([data length] == 0 && error == nil){
        failure(NO,nil);
    }

    else if (error != nil){
        NSLog(@"Error is %@",[error description]);
        failure(NO,nil);
    }

}];

[postDataTask resume];
}

非常感谢您的帮助。

对不起,我不能写评论。但我明白了,您可以使用内容类型:通过邮递员发送的url编码请求,以及通过代码发送的应用程序json。若API只接受url编码的请求,这就是您的答案

试试这个

-voidserverRequestFetchData:NSMutableURLRequest*带回调的请求:void^NSArray*,NSError*aCallback{

NSURLSessionDataTask *dataTask = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
    dispatch_sync(dispatch_get_main_queue(), ^{
        NSHTTPURLResponse *statusResponse = (NSHTTPURLResponse *)response;
        if (statusResponse.statusCode >= 200 && statusResponse.statusCode < 300) {
            if (data.length > 0 && error == nil) {
                NSArray *array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
                if (aCallback) {
                    aCallback(array, nil);
                }
            } else {
                aCallback(@[], error);
            }
        } else {
            NSString *statusMessage = [NSString stringWithFormat:@"Invalid status response code: %ld", (unsigned long)statusResponse.statusCode];
            NSError *statusError = [[NSError alloc] initWithDomain:@"com.somedomain" code:10001 userInfo:@{NSLocalizedDescriptionKey : NSLocalizedString(statusMessage, nil)}];
            if (aCallback) {
                aCallback(@[], statusError);
            }
        }
    });
}];
[dataTask resume];

}

如果Gennady的回答不起作用,你可以用Charles这样的代理来检查其他人differences@Simon谢谢,我接受了他的回答。谢天谢地。我怎么会错过呢。我得和后台人员谈谈。他们开发了其他API,内容类型仅为应用程序json。这就是为什么我没有注意到它的原因。注意,你可以要求邮递员生成Objective-C。这不是漂亮的代码,但它可以帮助你指出不同的标题,正文是如何编码的,等等。
NSString *jsonRequest = [NSString stringWithFormat:@"{\"access_token\":\"ACCESS_TOKEN_HERE\"}"];
NSData *requestData = [NSData dataWithBytes:[jsonRequest UTF8String] length:[jsonRequest length]];

NSString *URLString = [NSString stringWithFormat:@"YOUR_FIRST_URL_STRING"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:URLString]];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:[NSString stringWithFormat:@"%d", (int)[requestData length]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody: requestData];

[self serverRequestFetchData:request withCallback:^(NSArray *array, NSError *error) {
}];