2011-05-02 278 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