HTTPBody 中的 NSMutableRequest 数组和字典,服务器响应

Posted

技术标签:

【中文标题】HTTPBody 中的 NSMutableRequest 数组和字典,服务器响应【英文标题】:NSMutableRequest array and dictionary in HTTPBody, server respond 【发布时间】:2014-05-28 17:08:31 【问题描述】:

正在努力解决这个问题。看到很多例子,不知道我在这里做错了什么。需要一些新鲜的眼睛。我有一个数组和一个字典,我试图通过 HTTPBody 发送,然后返回其中一个,只是为了看看它是否正常工作。这是我所拥有的:

NSURL *url = [NSURL URLWithString:@"http://..."];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/x-www-form-urlencoded; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
NSString *postData = [NSString stringWithFormat:@"dictofcorners=%@&arrayofids=%@", dict, _idKeys];
NSString *length = [NSString stringWithFormat:@"%d", postData.length];
[request setValue:length forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:[postData dataUsingEncoding:NSASCIIStringEncoding]];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response;
    if ([httpResponse statusCode] == 200) 
        NSLog(@"%@", [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]);
    
];

服务器端我只想发回数组或字典。响应为 200,数据为空。如何处理数据服务器端?或者在我发送请求之前我应该​​做些什么来序列化数组和字典?

<?php
    $dictofcorners = json_decode($_REQUEST['dictofcorners']);
    echo json_encode($dictofcorners);
    //$arrayofids = json_decode($_REQUEST['arrayofids']);
    //echo json_encode($arrayofids);
?>

在下面回答!

【问题讨论】:

还是不清楚,你想处理响应还是向服务器发送一些数据? 我想根据数组和字典在服务器上运行查询并返回响应 看来你现在已经解决了这个问题。 【参考方案1】:

我是如何让它工作的......显然:

NSMutableDictionary *paramDic = [NSMutableDictionary new];
[paramDic setValue:dic forKeyPath:@"dic"];
[paramDic setValue:_idKeys forKeyPath:@"array"];
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:paramDic options:NSJSONWritingPrettyPrinted error:nil];

NSURL *url = [NSURL URLWithString:@"http://....php"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSString *length = [NSString stringWithFormat:@"%d", jsonData.length];
[request setValue:length forHTTPHeaderField:@"Content-Length"];
[request setValue:@"json" forHTTPHeaderField:@"Data-Type"];
[request setHTTPBody:jsonData];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response;
    if ([httpResponse statusCode] == 200) 
//...

php部分:

$input = file_get_contents("php://input");
$obj = json_decode($input, true);
$dic = $obj['dic'];
$array = $obj['array'];

我不了解 php 部分,但它可以工作。基本上只需要创建一个对象来传递身体......所以我创建了一本字典并添加了我需要传递的所有内容。如果有人想解释 php 部分,php://input 部分,我很高兴听到它!

【讨论】:

以上是关于HTTPBody 中的 NSMutableRequest 数组和字典,服务器响应的主要内容,如果未能解决你的问题,请参考以下文章

使用 PUT 方法的 HTTPBody 中的数据失败,而它与 POST 一起使用?

在 AFNetworking 中,httpbody 和参数发布请求之间的区别?

带有 HTTPBody 问题的 Alamofire 数据发送

request请求 HTTPBody 格式

在 Netfox 和 Moya 中记录 HTTPBody

如何在 Swift 中检索 NSURLRequest 的 HTTPBody 参数到 Dictionary: [NSObject: AnyObject]