首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >json PUT请求

json PUT请求
EN

Stack Overflow用户
提问于 2011-05-02 19:19:22
回答 3查看 1.2K关注 0票数 1

嗨,我用的是JSONKit。我需要通过json请求向服务器发送状态更新来更新linkedin站点中的状态。这是我发送的代码。我得到了400个性爱。请告诉我哪里出了错。

谢谢。

代码语言:javascript
运行
复制
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"];
EN

回答 3

Stack Overflow用户

发布于 2011-05-03 03:36:50

我将首先将您的json有效负载和连接响应数据写入一个简单的文本文件,然后查看(或者post,如果您想让我们看一下的话)。我发现这是我在将数据发布到服务时发现问题的最简单方法。您正在使用一个库,所以我猜有效负载应该是正常的,但是您永远不会知道。虽然我不能说我曾经使用过LinkedIn的api,但响应数据可能包含了更多关于真正问题的线索。

而且,我没有看到您在哪里指定请求是一个"PUT“。您是否包括

代码语言:javascript
运行
复制
 [req setHTTPMethod:@"PUT"];

使用以下代码将有效负载写入文件系统(很抱歉,格式不是很好,它无法很好地与移动safari配合):

代码语言:javascript
运行
复制
NSString *documentsDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSString *documentPath = [NSString stringWithFormat:@"%@/payloadData.txt", documentsDirectoryPath];  
[requestData writeToFile:documentPath atomically:YES];
票数 0
EN

Stack Overflow用户

发布于 2011-05-03 03:50:04

不知道这是否会完全满足您的使用需求,我正在使用iphone并连接到jayrock .net网络服务。

下面是我用来处理所有调用的命令。

此外,我还使用了json-framework。

代码语言:javascript
运行
复制
- (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
EN

Stack Overflow用户

发布于 2011-05-02 20:12:35

也许this可以帮助你。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5856491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档