0

我需要形成一个 POST NSURLRequest 并且我需要将这个结构传递给请求:

  • 检查(具有字符串键和值的 NSDictionaries 数组)
  • 属性(与 array1 相同的结构)
  • 子类别(一个 NSDictionaries 数组,其中每个字典可以有一个特定键的值数组)

这是我连接所有内容后我的 requestString 的样子:

?inspection[name]=inspection_name&inspection[address]=address_value&...&property[type]=property_type&....&subcategories[0][questions][0][title]=title_value&subcategories[0][questions][1][title]=title_value1&...&subcategories[1][questions][0][title]=title_valuen&...

对于检查和属性数组,我也尝试过inspection[][name]=inspection_name, property[][address]=property_address

当我形成那个 requestString 时,我正在使用这个方法转义每个参数:

static NSString *escapeParam(NSString *param) {
param = [param stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
param = [param stringByReplacingOccurrencesOfString:@"&" withString:@"%26"];
param = [param stringByReplacingOccurrencesOfString:@"=" withString:@"%3D"];
param = [param stringByReplacingOccurrencesOfString:@"?" withString:@"%3F"];
return param;

}

因此,像subcategories[0][questions][0][title]=title_value变成subcategories%5B0%5D%5Bquestions%5D%5B0%5D%5Btitle%5D=title_value

显然我做错了,不知道如何正确形成这个 requestString 因为当我触发请求时,我得到 HTTP Error 400 Bad request 作为响应。

有人可以指出我正确的方向吗?

非常感谢!

4

1 回答 1

1

首先 &, =,?不需要编码,支持这些字符。

其次,您不需要添加stringByAddingPercentEscapesUsingEncoding到整个正文中,我认为您根本不需要添加它,因为服务器应该支持转义字符。如果服务器不支持转义字符,则应将stringByAddingPercentEscapesUsingEncodingonly 应用于值,键应保持原样,例如

inspection[][name]=[inspection_name stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];

这将处理您的值中最终的转义字符,但键不应该有转义字符,因为它们是为在服务器上工作而创建的。

于 2013-05-17T12:15:53.657 回答