0

我正在为我的 iOS 应用程序使用用 PHP 开发的 Web 服务。现在我已经在 PHP 开发人员给出的 POST 正文中发送参数。但我无法以所需格式在 POST 正文中发送它。这是PHP开发人员给出的格式

       Array
(
    [key] => ecwrerwe3453453453454cea
    [secret] => 45d77657657567jghjb6ef
    [product] => Array
        (
            [name] => mobile
            [id] => 3
            [desc] => nokia c 5
            [price] => 5
        )

    [spec] => Array
        (
            [0] => Array
                (
                    [key] => color
                    [value] => ping
                )

        )
)

我发送到服务器的内容如下

    {
    key = c435435t3tergs680;
    product =     (
                {
            id= 3;
            desc = "Test desc";
            name = "Nokia mobile";
            "price" = "987.65";
        }
    );
    secret = 43ytehgrdghd1ee0d8;
    specs =     (
                (
                        {
                key = aaaaaaaaa;
                value = aaaa;
            }
        ),
                (
                        {
                key = bbbbbbbbbb;
                value = bbbbb;
            }
        )
    );
}

要在 POST 正文之上构建,我在 iOS 中使用以下代码

NSMutableArray *specsArray = [[NSMutableArray alloc]init];
    for (ProductSpecification *prodSpecs in self.newProduct.specificationArray)
    {
        NSMutableDictionary *specsDict = [[NSMutableDictionary alloc]init];
        [specsDict setValue:prodSpecs.name forKey:SPECS_NAME_KEY];
        [specsDict setValue:prodSpecs.value forKey:SPECS_VALUE_KEY];
        NSArray *array = [NSArray arrayWithObjects:specsDict, nil];
        [specsArray addObject:array];
    }

    NSMutableArray *productArray = [[NSMutableArray alloc]init];
    NSMutableDictionary *productDict = [[NSMutableDictionary alloc]init];
    [productDict setValue:self.newProduct.name forKey:NAME_KEY];
    [productDict setValue:self.newProduct.prodId forKey:ID_KEY];
    [productDict setValue:self.newProduct.productDescription forKey:DESC_KEY];
    [productDict setValue:self.newProduct.price forKey:PRICE_KEY];
    [productArray addObject:productDict];

    NSMutableDictionary *params = [[NSMutableDictionary alloc]initWithObjectsAndKeys:productArray,NEW_PRODUCT_ARRAY_NAME_KEY,specsArray,SPECS_ARRAY_KEY,nil];
    // Get the API keys & append it in params 
    NSDictionary *keysDictionary = [kUserDefaults getAPIKeys];
    [params setValue:[keysDictionary objectForKey:API_KEY] forKey:API_KEY];
    [params setValue:[keysDictionary objectForKey:API_SECRET_KEY] forKey:API_SECRET_KEY];

    NSLog(@"Params Dict: %@",params);

我无法将所需格式的数据发送到服务器。如何发送数组而不是 nsdictionary 中的键值?

谁能告诉我我的 iOS 代码出了什么问题?

任何形式的帮助都将受到高度赞赏。提前致谢。

4

1 回答 1

0

我不确定这是否能解决你的问题,但它可能会帮助你到达那里。

本质上,您正在重新创建以下 HTML 表单,但来自您的 iOS 应用程序:

<form method="post">
<input name="key" type="hidden" value="ecwrerwe3453453453454cea" />
<input name="secret" type="hidden" value="45d77657657567jghjb6ef" />
<input name="product[name]" type="hidden" value="mobile" />
<input name="product[id]" type="hidden" value="3" />
<input name="product[desc]" type="hidden" value="nokia c 5" />
<input name="product[price]" type="hidden" value="5" />
<input name="spec[0][key]" type="hidden" value="color" />
<input name="spec[0][value]" type="hidden" value="ping" />
<input type="submit" name="submit" />
</form>

提交此表单时,浏览器将在帖子正文中提交以下内容:

key=ecwrerwe3453453453454cea&secret=45d77657657567jghjb6ef&product%5Bname%5D=mobile&product%5Bid%5D=3&product%5Bdesc%5D=nokia+c+5&product%5Bprice%5D=5&spec%5B0%5D%5Bkey%5D=color&spec%5B0%5D%5Bvalue%5D=ping&submit=Submit

或解码:

key=ecwrerwe3453453453454cea&secret=45d77657657567jghjb6ef&product[name]=mobile&product[id]=3&product[desc]=nokia c 5&product[price]=5&spec[0][key]=color&spec[0][value]=ping

您可以尝试使用 NSMutableString / appendFormat / 自行创建此字符串。然后在你的(大概)NSMutableUrlRequest 中,[request setHTTPBody:[postDataString dataUsingEncoding:NSUTF8StringEncoding]];

我猜你的代码可能看起来像这样:

NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.example.com/api/"] cachePolicy:NSURLCacheStorageNotAllowed timeoutInterval:60];
[request setHTTPMethod:@"POST"];

NSMutableString* postDataString = [[NSMutableString alloc] init];
[postDataString appendFormat:@"key=%@",key];
[postDataString appendFormat:@"&secret=%@",secret];
[postDataString appendFormat:@"&product%5Bname%5D=%@",self.newProduct.name];
// etc...

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

不要忘记,你也需要正确地逃避你的价值观。

于 2013-02-05T16:50:56.413 回答