我喜欢JSONKit。我需要通过json请求将状态更新发送到服务器来更新linkedin站点中的状态。这是我发送的代码。 im gettin 400 eroor。请告诉我这是错误的。
感谢。
NSMutableDictionary *jsonDict = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"linkedin-html",@"contentType",@"My Fancy Update",@"body",nil];
NSString *str =[jsonDict JSONString];
NSMutableData *requestData = [NSMutableData dataWithBytes:[str UTF8String] length:[str length]];
[self setHTTPBody:requestData];
[self setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"];
[self setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
答案 0 :(得分:0)
我首先将您的json有效负载和连接响应数据写入一个简单的文本文件并进行审核(或发布,如果您希望我们查看)。我发现这是发布数据到服务时发现问题的最简单方法。你正在使用一个库,所以我的猜测是有效载荷应该没问题,但你永远不知道。响应数据可能包含更多关于真实问题的提示,但我不能说我曾经使用过LinkedIn的api。
此外,我没有看到您指定请求是“PUT”的位置。你有没有
[req setHTTPMethod:@"PUT"];
使用此代码将有效负载写入文件系统(对不起格式化,它不适合使用移动游戏):
NSString *documentsDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *documentPath = [NSString stringWithFormat:@"%@/payloadData.txt", documentsDirectoryPath];
[requestData writeToFile:documentPath atomically:YES];
答案 1 :(得分:0)
不知道这是否符合您的使用需求,我正在使用iphone并连接到jayrock .net webservices。
这是我用来处理所有呼叫的命令。
另外,我正在使用json-framework
- (NSDictionary*) sendJSONRPCRequestTo:(NSString*) url
forCommand:(NSString*)command
withParamaters:(NSMutableArray*) parameters
synchronous:(BOOL) sendSynchronous
{
if (parameters != nil)
{
[parameters setValue:[HSAppData appVersion] forKey:@"AppVersion"];
[parameters setValue:[NSNumber numberWithDouble:[HSAppData currentLocation].longitude] forKey:@"Longitude"];
[parameters setValue:[NSNumber numberWithDouble:[HSAppData currentLocation].latitude] forKey:@"Latitude"];
}
if (self.commandId == nil)
{
self.commandId = @"1";
}
NSMutableURLRequest *request = [self.baseTransaction makeNewRequestFor:url];
NSMutableDictionary *mainPackage = [NSMutableDictionary dictionary];
[mainPackage setValue:self.commandId forKey:@"id"];
[mainPackage setValue:command forKey:@"method"];
[mainPackage setValue:parameters forKey:@"params"];
NSString *jsonData = [mainPackage JSONRepresentation];
[request setValue:command forHTTPHeaderField:@"X-JSON-RPC"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
if (jsonData != nil && [jsonData isEqual:@""] == NO)
{
[request setHTTPMethod:@"POST"];
[request setValue:[[NSNumber numberWithInt:[jsonData length]] stringValue] forHTTPHeaderField:@"Content-Length"];
}
[request setHTTPBody:[jsonData dataUsingEncoding:NSUTF8StringEncoding]];
if (sendSynchronous)
{
NSHTTPURLResponse * response = nil;
NSError * error = nil;
//self.baseTransaction.lastConnection = nil;
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSString *jsonResult = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
NSDictionary *jsonDict = nil;
@try {
jsonDict = [jsonResult JSONValue];
}
@catch (NSException * e) {
NSLog(@"Error: %@",jsonResult);
jsonDict = [NSMutableDictionary dictionary];
[jsonDict setValue:self.commandId forKey:@"id"];
[jsonDict setValue:@"Unable to call function on server" forKey:@"error"];
[jsonDict setValue:[NSNull null] forKey:@"result"];
}
@finally {
return jsonDict;
}
}
// TODO: Add ASynchronous
// else
// {
// }
}
答案 2 :(得分:-1)
可能this可以帮助您。