对 NSMutableRequest 的 PHP Json 请求!帮助?

Posted

技术标签:

【中文标题】对 NSMutableRequest 的 PHP Json 请求!帮助?【英文标题】:PHP Json request to NSMutableRequest! Help? 【发布时间】:2011-09-12 00:02:05 【问题描述】:

我需要一点帮助...我正在尝试使用 apptrackr API (API Apptrackr - You must be registred ) 使用我的 iPhone 应用程序但没有成功。我有一些适用于 API 的 php 示例代码,但我不知道如何使用 Objective-c 来做到这一点。我已经做了一些测试,但我真的不知道我错在哪里!

这是 PHP 代码:

<?php
 $request = array('object' => 'Link',
    'action' => 'get',
    'args' =>  array(
                     'all_version' => true,
                     'app_id' => 284972998
                     )
 );


// Wrap the request and JSON encode it.
$wrapper = array(
       'request' => json_encode($request)
);


// JSON and URLencode the wrapper.
$wrapper = urlencode(json_encode($wrapper));

// Now, using the cURL extension, we perform the API request.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://api.apptrackr.org/');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "request=$wrapper");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);

// print the output
print_r($data);

?>

这是我的 Objective-C 代码:

NSMutableDictionary *arg = [NSMutableDictionary dictionary];
[arg setObject:[NSNumber numberWithBool:YES] forKey:@"all_versions"];
[arg setObject:[NSNumber numberWithInt:284972998] forKey:@"app_id"];

NSMutableDictionary *requestDictionary = [NSMutableDictionary dictionary];
[requestDictionary setObject:@"Link" forKey:@"object"];
[requestDictionary setObject:@"get" forKey:@"action"];
[requestDictionary setObject:arg forKey:@"args"];

NSString *jsonString = [requestDict JSONRepresentation];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://api.apptrackr.org"]];
[request setHTTPMethod:@"POST"];
[request setValue:jsonString forHTTPHeaderField:@"request"];

NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
    NSString *recivedSTR = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"RecivedData: %@", recivedSTR);

我希望有人可以帮助我!现在非常感谢! PS:对不起我的英语不好

【问题讨论】:

【参考方案1】:

我猜您不应该将 jsonString 放在 HTTP 标头字段中,而应放在请求的 POST 正文中。

试试这个:

[request setHTTPBody:[NSString stringWithFormat:@"request=%@",jsonString]];

【讨论】:

您是否检查过 jsonString 是否具有预期值和格式,以及 JSONRepresentation 方法(可能是您在 NSDictionary 上添加的一个类别,我想创建有效的 JSON(至少 JSON 被认为对目标 web 服务/API)?您应该将使用 ObjC 生成的字符串与您的 PHP 代码生成的字符串进行比较,以检查其格式是否完全相同。 解决了!!如您所说,jsonString 中有错误!!非常感谢您的帮助!!!

以上是关于对 NSMutableRequest 的 PHP Json 请求!帮助?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 NSURLConnection (NSMutableRequest) 超时

无法使用类型的参数列表调用“dataTask”(使用:NSMutableRequest,...)

NSMutableRequest 和 NSURLConnection 的最大超时时间

NSMutableRequest 对象主体的分配数据未释放

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

4 AFURLRequestSerialization