将参数添加到 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];
我在向我的代码行添加参数时遇到了一些问题。我已经创建了一个可以访问这个变量的全局变量,并让 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
方法中分配它。然后在发送请求时,使用:
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];