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 数据发送
如何在 Swift 中检索 NSURLRequest 的 HTTPBody 参数到 Dictionary: [NSObject: AnyObject]