首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSON Payload似乎没有发送

JSON Payload似乎没有发送
EN

Stack Overflow用户
提问于 2012-11-24 03:27:38
回答 1查看 377关注 0票数 0

我很肯定我的问题很简单,我一定是漏掉了什么..只是不确定是什么。

我可以为粒度元素发送GET和POST (this=that之类的东西),但我也需要发送数据的web服务调用需要一个原始的JSON块,没有“键”。

下面是我写的方法:

代码语言:javascript
复制
-(NSData *)execute {

    // Smart Chooser ?
    if(PostData.count >0 || Payload != nil)
        [self setMethod:UPLINK_METHOD_POST];
    else
        [self setMethod:UPLINK_METHOD_GET];



    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:self.connectionUrl
                                                           cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData
                                                       timeoutInterval:10];


    if([UPLINK_METHOD_GET isEqualToString:self.connectionMethod])
        [request setHTTPMethod:@"GET"];
    else
        [request setHTTPMethod:@"POST"];


    NSString *gData = [self compileGetData];
    NSString *pData = [self compilePostData];

    // if we have get data, set it into the URL string
    if(GetData.count > 0) {

        [self setURLWithString:[[self.connectionUrl absoluteString] stringByAppendingString:[@"?" stringByAppendingString:gData]]];
        [request setURL:self.connectionUrl];

    }

    // if we have post data, set it in the body
    if(PostData.count > 0) {
        const char *bytes = [[NSString stringWithString:pData] UTF8String];
        [request setHTTPBody:[NSData dataWithBytes:bytes length:strlen(bytes)]];

    }

    // Override any post data if a payload is already defined.
    if(Payload != nil) {

        [request setHTTPBody:[Payload dataUsingEncoding:NSUTF8StringEncoding]];

    }

    NSLog(@"URL : %@", request.URL);


    NSURLResponse *response;
    NSError *err;
    NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];

    if(err != nil)
        NSLog(@"here was an error: %@", err);


    return responseData;
}

-(NSDictionary *)executeAsJSON
{
    NSData *responseData = [self execute];
    NSError *e;
    return [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableContainers error:&e];
}

它的工作方式是,根据GetData、PostData和Payload变量中提供的数据,自动设置请求是POST还是GET。

默认情况下,请求是GET,但如果PostData或Payload中有任何内容,则会转换为POST。

compileGetDatacompilePostData主要只是返回组合了信息数组的格式化字符串,没有什么特别之处。

但这并不是问题所在。

看,"Payload“覆盖了"PostData”里面的任何东西。如果您在类中提供了PostData元素,那么它将被提供的有效负载覆盖(如果它确实存在的话)。

我需要提供这个来演示“工作区”,因为它现在存在,它不是线性提供的信息。

这是您感兴趣的区域:

代码语言:javascript
复制
// Override any post data if a payload is already defined.
if(Payload != nil) {

    //const char *plbytes = [[NSString stringWithString:Payload] UTF8String]; // this didn't work
    [request setHTTPBody:[Payload dataUsingEncoding:NSUTF8StringEncoding]]; // inline, doesn't work either

}

当我说“不工作”时,我的意思是,我从webservice返回了一个错误的JSON数组,这基本上意味着“嘿,有效负载在哪里?”如果请求不是POST,它会返回一个通用错误,所以一切正常,那么URL显然是正确的。

我已经使用Chrome的RESTConsole测试了and服务,以确保它工作正常,它确实工作正常。

我还通过调试器检查了我发送的确切有效负载,我将其copy+pasted到RESTConsole中,它在那里工作。

我..。老实说,在这里不知所措...

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-24 03:37:19

尝试使用CharlesWireshark这样的web代理(我个人更喜欢Charles,因为它的易用性,尽管这是一个30天的试用期),并监控你从RESTConsole发出的请求和你从你的应用发出的请求,看看它们是否看起来一样。

检查任何标题、行回车和任何其他看起来不同的内容。

这是我能想到的最好的开始

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

https://stackoverflow.com/questions/13534804

复制
相关文章

相似问题

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