我的问题我很积极很简单,我一定只是遗漏了什么......只是不确定是什么。
我可以为粒度元素发送GET和POST(这=那种东西),但是我需要发送数据的Web服务调用,需要一个原始的JSON块,没有“密钥”
继承我写的方法:
-(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];
}
好的,这个方法的工作方式是,它会自动设置请求是POST还是GET,具体取决于GetData,PostData和Payload vars中提供的数据。
默认情况下,请求是GET,但如果PostData或Payload中包含任何内容,则会变为POST
compileGetData
和compilePostData
大多只是将带有信息数组的格式化字符串组合在一起,没有什么特别之处。
但那不是问题所在。
请参阅“Payload”覆盖“PostData”中的任何内容。如果你已经将PostData元素提供给了类,那么只要它存在,它就会被提供的Payload覆盖。
我需要提供这个来展示现在存在的“工作区”,它不是线性提供的信息。
这是感兴趣的领域:
// 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
}
当我说“不工作”时,我的意思是,我从网络服务中获取一个错误的JSON数组,基本上意味着“嘿,有效载荷?”。如果请求不是POST,则它会返回为一般错误,因此一切正常,URL显然是正确的。
我已经使用RESTConsole for Chrome来测试web服务以确保其正常工作,而且确实如此。
我还通过调试器检查了发送的确切有效负载,我将其复制+粘贴到RESTConsole中,并且它在那里工作。
我真的在这里不知所措......