开发人员需要从 iOS 应用中调用使用 Python 的 Ladon 框架开发的 Web 服务。
- Web 服务的 URL 为:http://ladonize.org/python-demos/Calculator。
2. 解决方案
-
检查 URL 路径是否正确。
在iOS代码中,将URL路径更改为:http://ladonize.org/python-demos/Calculator/jsonwsp。 -
使用 dataUsingEncoding: 方法创建 jsonData。
以下是对现有代码的修改,使用 dataUsingEncoding: 方法创建 jsonData:
NSString *jsonString = [NSString stringWithFormat:@"{\"methodname\":\"add\",\"args\": {\"a\":123,\"b\":123}}"];
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
- 删除对
NSURLResponse *theResponse
的初始化。
删除以下行:
NSURLResponse *theResponse = [[NSURLResponse alloc] init]
-
在发送请求之前,将 Accept 头字段的值设置为 application/json。
-
将以下代码添加到代码中,在发送请求之前,将 Accept 头字段的值设置为 application/json:
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
-
验证 HTTP 状态代码。
在收到响应后,检查theResponse
中的 HTTP 状态代码,以确保它是 200。 -
使用以下代码检查 HTTP 状态代码:
if ([theResponse isKindOfClass:[NSHTTPURLResponse class]]) {
NSInteger statusCode = [(NSHTTPURLResponse *)theResponse statusCode];
if (statusCode != 200) {
NSLog(@"Error: HTTP status code %ld", (long)statusCode);
return;
}
}
-
解析 JSON 响应。
在将 JSON 响应解析为字典或数组之前,检查是否有任何 JSON 解析错误。 -
使用以下代码解析 JSON 响应:
NSError *jsonParsingError = nil;
NSDictionary *jsonResponse = [NSJSONSerialization JSONObjectWithData:data options:0 error:&jsonParsingError];
if (jsonParsingError) {
NSLog(@"Error: JSON parsing error: %@", jsonParsingError);
return;
}
- 处理解析后的 JSON 响应。
使用解析后的 JSON 响应对象来获取所需的数据。
- 以下是处理解析后的 JSON 响应的示例:
NSString *result = jsonResponse[@"result"];
NSLog(@"Result: %@", result);
- 完整的示例代码如下:
NSString *requestString = [NSString stringWithFormat:
@"http://ladonize.org/python-demos/Calculator/jsonwsp"];
NSString *jsonString = [NSString stringWithFormat:@"{\"methodname\":\"add\",\"args\": {\"a\":123,\"b\":123}}"];
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:requestString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setHTTPBody: jsonData];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:[NSString stringWithFormat:@"%d", [jsonData length]] forHTTPHeaderField:@"Content-Length"];
NSError *errorReturned = nil;
NSURLResponse *theResponse =[[NSURLResponse alloc]init];
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&theResponse error:&errorReturned];
if (errorReturned) {
NSLog(@"Error %@",errorReturned.description);
}
else
{
NSError *jsonParsingError = nil;
NSMutableArray *arrDoctorInfo = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers|NSJSONReadingAllowFragments error:&jsonParsingError];
NSString* newStr = [NSString stringWithUTF8String:[data bytes]];
NSLog(@"Dict %@",newStr);
}
通过以上步骤,就可以从 iOS 应用中调用使用 Python 的 Ladon 框架开发的 Web 服务了。