如何在正文数据中使用数组发出 POST 请求



我正在尝试使用Objective-C执行此操作,但我认为是相同的正文数据,但不知道它必须如何。

我找到了这样做的方法:

POST request
head: </*Your route*/>
body:
p=aString&p=bString&p=cString&p=dString

然后在服务器中,您将获得:

body : {
     p : [{
          "aString",
          "bString",
          "cString",
          "dString"
     }]
}

感谢您的支持:)

一种方法(不确定最佳方法)是通过将元素的 # 作为 POST 数据字段发送来对 POST 数据中的数组进行编码。 例如

NSArray *array = @[@"hi", @"there"];
NSMutableString *postData = [NSMutableString stringWithFormat:@"array_length=%d", array.count];
for (int i=0; i<array.count; ++i)
    [postData appendFormat:@"&array_%d=%@", i, array[i]];
// ...

然后,解码器获取array_length并迭代i = [0 .. array_length-1]以使用 array_0, array_1, ... 重新填充数组。

这是我在旧项目中使用的两种方法。需要设置 NSURLConnectionDelegate 并实现所需的方法。

// Check if the URLString is a valid data object
- (void) formatURLString: (NSString *) target forData:(NSArray *) data 
{
    if ([NSJSONSerialization isValidJSONObject:data]) 
    {
        NSError *error;
        NSData *JSONdata = [NSJSONSerialization dataWithJSONObject:data options:kNilOptions error:&error];
        // *** POST ***//
        [self post:target withJSON:JSONdata];
    } else 
    {
        NSLog(@"Invalid JSON object. JSON object: %@", data);
    }
}

- (void) post: (NSString *) target withJSON: (NSData *) jsonData 
{
    // Inform user network activity is taking place
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
    NSMutableURLRequest *urlRequest =
    [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:target]];
    [urlRequest setHTTPMethod:@"POST"];
    [urlRequest addValue:@"postValues" forHTTPHeaderField:@"METHOD"];
    [urlRequest setHTTPBody:jsonData];
    NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:urlRequest
                                                                  delegate:self];
    if (!connection) { NSLog(@"Connection Failed"); }
}

最新更新