我有一个在服务器上运行的 Web 服务,它以 XML 格式或 JSON 格式返回数据。我想请求 JSON 格式,但使用 HTTP Post 方法。
非常感谢任何帮助。
提前致谢。
我有一个在服务器上运行的 Web 服务,它以 XML 格式或 JSON 格式返回数据。我想请求 JSON 格式,但使用 HTTP Post 方法。
非常感谢任何帮助。
提前致谢。
这是适用于 JSON 发布请求的代码,TouchJSON 框架用于解析 JSON,感谢“schwa”。
NSArray *keys = [NSArray arrayWithObjects:@"username", @"password", @"preference", @"uid", nil];
NSArray *objects = [NSArray arrayWithObjects:@"accuser", @"accpass", @"abc_region", @"100", nil];
NSDictionary *theRequestDictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
NSURL *theURL = [NSURL URLWithString:@"http://url.com/request.php"];
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:theURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10.0f];
[theRequest setHTTPMethod:@"POST"];
[theRequest setValue:@"application/json-rpc" forHTTPHeaderField:@"Content-Type"];
NSString *theBodyString = [[CJSONSerializer serializer] serializeDictionary:theRequestDictionary];
NSLog(@"%@", theBodyString);
NSData *theBodyData = [theBodyString dataUsingEncoding:NSUTF8StringEncoding];
// NSLog(@"%@", theBodyData);
[theRequest setHTTPBody:theBodyData];
NSURLResponse *theResponse = NULL;
NSError *theError = NULL;
NSData *theResponseData = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&theResponse error:&theError];
NSString *theResponseString = [[[NSString alloc] initWithData:theResponseData encoding:NSUTF8StringEncoding] autorelease];
NSLog(theResponseString);
NSDictionary *theResponseDictionary = [[CJSONDeserializer deserializer] deserialize:theResponseString];
NSLog(@"%@", theResponseDictionary);
NSString *theGreeting = [theResponseDictionary objectForKey:@"greeting"];
[self setValue:theGreeting forKey:@"greeting"];
不太确定你的问题到底是什么。但是谷歌“TouchJSON”应该可以帮助你入门。
很抱歉出现错误和内存泄漏,但是像这样的东西怎么样:
CFURLRef url = CFURLCreateWithString(NULL, CFSTR("http://example.com/post"), NULL);
CFHTTPMessageRef msg = CFHTTPMessageCreateRequest(
NULL,
CFSTR("POST"),
url,
kCFHTTPVersion1_1);
const char *body = "key=value&id=30293";
CFDataRef bodyData = CFDataCreate(NULL, body, strlen(body));
CFHTTPMessageSetBody(msg, bodyData);
CFReadStreamRef myReadStream = CFReadStreamCreateForHTTPRequest(NULL, myRequest);
CFReadStreamOpen(myReadStream);
CFHTTPMessageRef myResponse = CFReadStreamCopyProperty(
myReadStream,
kCFStreamPropertyHTTPResponseHeader);
//
// Handle myResponse
//
CFReadStreamClose(myReadStream);
CFRelease(myReadStream);
CFRelease(bodyData);
CFRelease(msg);
CFRelease(url);