如何在iOS应用中使用Objective C解析Ruby on rails webservice



我不知道Ruby on rails,我有一个任务来创建web服务与Ruby on rails。我正在尝试使用AFNetworking和NSURLConnection,但没有得到响应。

TIMESTAMP_KEY = '6ad3e2c0ffa4a89217e0'
SECRET_KEY  = 'fd83be9e64ddec6ee8344708a189d039ad9e9d51'
HOST = 'http://em.dev.apb.com
URL = 'company_users/login'

他们说以上参数是预定义的,它的ruby代码如下:

1 params = []
2 sorted_params = params.sort.join
3 puts "sorted_params=#{sorted_params}"
4 digest = Digest::SHA1.hexdigest("#{timestamp}#{TIMESTAMP_KEY}")
5 puts "digest=#{digest}"
6 puts "SHA1(#{URL}#{sorted_params}#{SECRET_KEY}#{digest})"
7 signature = Digest::SHA1.hexdigest("#{URL}#{sorted_params}#{SECRET_KEY}#{digest}")
puts "#{HOST}#{URL}"
response = RestClient.post "#{HOST}/#{URL}/#{signature}/#{timestamp}", :email => email, :password => password

我不知道如何得到它的响应在目标C:

我正在尝试AFnetworking

 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    NSString *signature =[self sha1:@"fd83be9e64ddec6ee8344708a189d039ad9e9d51"];
    NSString *timestep =[self sha1:@"6ad3e2c0ffa4a89217e0"];
    NSDictionary *params = @{@"email": @"abc@superuser.com",@"password": @"aaa111"};
    NSLog(@"%@",params);
    NSString *url =[NSString stringWithFormat:@"http://em.dev.abc.com/company_users/login/%@/%@",signature,timestep];
    [manager POST:url parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"JSON: %@", responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error: %@", error);
    }];

I got this Link

所以我使用这个方法

-(NSString*) sha1:(NSString*)input
{
    const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding];
    NSData *data = [NSData dataWithBytes:cstr length:input.length];
    uint8_t digest[CC_SHA1_DIGEST_LENGTH];
    CC_SHA1(data.bytes, data.length, digest);
    NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
    for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)
        [output appendFormat:@"%02x", digest[i]];
    return output;
}

每次我得到这样的错误输出:

Error: ErrorDomain =NSCocoaErrorDomain Code=3840 "操作无法完成。(Cocoa错误3840)"(JSON文本没有以数组或对象和选项开始,以允许未设置片段。)UserInfo=0x8c56190 {NSDebugDescription=JSON文本没有以数组或对象开始,选项允许未设置片段。

从你得到的错误代码:

JSON text did not start with array or object and option to allow fragments not set

看起来您的请求或服务器响应不是有效的JSON。

你确定你发布了一个有效的JSON结构

{
   "email": "myemail@test.com",
   "password": "mypassword"
}

到远程主机?你确定你发布的URL是正确的吗?你试过用邮差之类的工具测试url吗?

从错误消息来看,您似乎没有获得有效的JSON,请ruby开发人员再次检查它,您也可以使用@ mcfinnigan提到的工具,检查您从web服务

获得的响应。

最新更新