将参数添加到 setHTTPBody 请求 Xcode

Adding Parameters to setHTTPBody request Xcode

我在向我的代码行添加参数时遇到了一些问题。我已经创建了一个可以访问这个变量的全局变量,并让 NSLog 验证它是否可以访问,但是我在添加变量时遇到了麻烦。

我的代码行是这样的,我想添加一个 tran_id,它已经被定义为变量 "ttt",它是一个 NSString。我现在在代码中使用它的方式不起作用。

 NSLog(@"tran id: %@", ttt);

[request setHTTPBody:[@"{\n  \"partner_key\": \"VxYkMw3N8E\",\n  \"auth_token\": \"QaU9QcFZ6xE7aiRRBge0wZ4p6E01GEbl\",\n  \"tran_id\": \"%@\"\n}", ttt dataUsingEncoding:NSUTF8StringEncoding]];

使用 stringWithFormat:

[request setHTTPBody:
    [NSString stringWithFormat:@"{\n  \"partner_key\": \"VxYkMw3N8E\",\n  \"auth_token\": \"QaU9QcFZ6xE7aiRRBge0wZ4p6E01GEbl\",\n  \"tran_id\": \"%@\"\n}", ttt]
    dataUsingEncoding:NSUTF8StringEncoding]];

我怀疑您是否需要 \n 和其中的空格 - 它们通常只是为了使其更易于阅读。这将使您的格式字符串更容易破译:

[request setHTTPBody:
    [NSString stringWithFormat:@"{\"partner_key\":\"VxYkMw3N8E\",\"auth_token\":\"QaU9QcFZ6xE7aiRRBge0wZ4p6E01GEbl\",\"tran_id\":\"%@\"}", ttt]
    dataUsingEncoding:NSUTF8StringEncoding]];

我认为你不能在setHTTPBody方法中设置params,你需要的是之前有一个NSStringWithFormat:

NSString *body = [NSString stringWithFormat:@"{\n  \"partner_key\": \"VxYkMw3N8E\",\n  \"auth_token\": \"QaU9QcFZ6xE7aiRRBge0wZ4p6E01GEbl\",\n  \"tran_id\": \"%@\"\n}", ttt];

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

当然,这是快速的方法 - 因为您要发送 JSON 数据,请考虑了解 NSJSONSerialization 的工作原理。

您过早地将参数格式化为字符串。一旦将其格式化为字符串,就无法轻易修改值,也无法添加新参数。

相反,您需要将这些参数收集为 NSMutableDictionary,并且只有在您准备好发送请求时才将其转换为 JSON。

因此创建一个 parameters 属性:

@property (nonatomic) NSMutableDictionay *parameters;

并且不要忘记在 init 方法中分配它。然后在发送请求时,使用:

生成 JSON
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:parameters 
                                                   options:0
                                                     error:&error];

您使用这么大的长字符串来设置 HTTP 正文,这让您自己很难过。改用字典:

NSMutableDictionary *dictionary = [[NSMutableDictionary alloc]init];
[dictionary setObject:@"VxYkMw3N8E" forKey:@"partner_key"];
[dictionary setObject:@"QaU9QcFZ6xE7aiRRBge0wZ4p6E01GEbl" forKey:@"auth_token"];    



NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionary
                                                   options:NSJSONWritingPrettyPrinted error:&error];


NSString *jsonString;

if (!jsonData) {
} else {
    jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}


 [request setHTTPBody: jsonData];