2010-04-07 44 views
2

我不知道如何使用Obj-C发布JSON RPC请求。谁能帮我?iPhone + Drupal + JSON RPC服务器问题

到目前为止,我有:

responseData = [[NSMutableData data] retain]; 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://*************/services/json-rpc"]]; 

NSString *jsonString = @"{\"jsonrpc\": \"2.0\",\"method\": \"node.get\", \"params\": { \"arg1\": 1 } ,\"id\": \"dsadasdas\"}"; 
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF32BigEndianStringEncoding]; 

[ request setHTTPMethod: @"POST" ]; 
[ request setHTTPBody: jsonData ]; 
[ request setValue:@"application/json" forHTTPHeaderField:@"Content-> Type"]; 

[[NSURLConnection alloc] initWithRequest:request delegate:self]; 

我使用Drupal的+服务+ Json的服务器& JSON RPC服务器。

好像我得到更好的结果与第一个,问题是建设后我觉得身体......

请帮助我。

回答

1

这个固定:

SBJSON *json = [SBJSON new]; 
json.humanReadable = YES; 
NSString *service = @"node.get"; 

NSMutableDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys: 
           @"1",@"nid", 
           nil]; 
//Pass it twice to escape quotes 
NSString *jsonString = [NSString stringWithFormat:@"%@", [params JSONFragment], nil]; 
NSString *changeJSON = [NSString stringWithFormat:@"%@", [jsonString JSONFragment], nil]; 

NSLog(jsonString); 
NSLog(changeJSON); 


NSString *requestString = [NSString stringWithFormat:@"method=node.get&vid=1",service,changeJSON,nil]; 
NSLog(requestString); 


NSData *requestData = [NSData dataWithBytes: [requestString UTF8String] length: [requestString length]]; 


NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString: @"http://******************/services/json"]]; 

NSString *postLength = [NSString stringWithFormat:@"%d", [requestData length]]; 
[request setHTTPMethod: @"POST"]; 
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
[request setHTTPBody: requestData]; 

//Data returned by WebService 
NSData *returnData = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: nil ]; 
NSString *returnString = [[NSString alloc] initWithData:returnData encoding: NSUTF8StringEncoding]; 

NSLog(returnString); 
+1

您应该使用Drupal的IOS SDK https://github.com/workhabitinc/drupal-ios-sdk – 2011-06-04 20:47:25