2011-05-02 218 views
1

您好iam usng JSONKit。我需要通过将json请求的状态更新发送到服务器来更新linkedin站点中的状态。这是我发送的代码。即时消息400 eroor。请告诉我最新的错误。json PUT请求

谢谢。

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

什么实际回应说?它是否返回http或json? – JFoulkes 2011-05-02 11:23:12

+0

即时通讯400错误。它表示不支持的数据类型。 – jan 2011-05-03 04:58:07

回答

-1

可能是this可以帮到你。

0

我会开始写你的JSON负载和连接响应数据到一个简单的文本文件和审查(或发布,如果你想让我们看看)。我发现这是在将数据发布到服务时发现问题的最简单方法。你正在使用一个库,所以我的猜测是有效载荷应该没问题,但你永远不知道。响应数据可能包含更多关于真正问题的提示,尽管我不能说我曾经使用过LinkedIn的api。

此外,我没有看到你指定的请求是“PUT”。是否包含

[req setHTTPMethod:@"PUT"]; 

使用此代码写的有效载荷文件系统(抱歉的格式,它不与移动Safari浏览器很好地扮演):

NSString *documentsDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSString *documentPath = [NSString stringWithFormat:@"%@/payloadData.txt", documentsDirectoryPath]; 
[requestData writeToFile:documentPath atomically:YES]; 
+0

我在请求中包含了PUT。 sry没有在这里发布。 json有效载荷的含义? sry im new to json can you explain abt it。谢谢 – jan 2011-05-03 04:59:56

+0

有效负载,我的意思是你提供给服务的数据。我将使用代码编辑答案,以便将文件写入本地目录供您浏览(使用OAuth库进行本地浏览)(本地如iPhone /模拟器文件系统) – 2011-05-03 18:37:35

0

不知道这是否会适合你使用需求确切地说,我使用iphone并连接到jayrock .net webservices。

以下是我用来处理所有呼叫的命令。

此外,我使用JSON的框架

- (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 
// { 
// } 

} 
+0

。所以我绝对需要创建请求并仅使用库方法发送。 – jan 2011-05-03 05:00:49

+0

好吧,它看起来像你的“自我”对象是我的“请求”对象。和你的“requestData”我正在做同样的事情“[jsonData dataUsingEncoding:NSUTF8StringEncoding]”。也许你错过了这一行“[request setHTTPMethod:@”POST“];”你会在“自我”上执行 – 2011-05-03 05:15:55

+0

另外我不知道你的JSON格式是什么样的。我使用JSON框架,以便我不必担心手动格式化。 – 2011-05-03 05:17:26