【问题标题】:How to parse Ruby on rails webservice using Objective C in iOS application如何在 iOS 应用程序中使用 Objective C 解析 Ruby on rails webservice
【发布时间】:2014-06-06 09:58:59
【问题描述】:

我不知道Ruby on rails 我的任务是使用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);
    }];

我收到了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;

}

每次我得到这个输出时都是这样的错误:

错误:错误域 = NSCocoaErrorDomain 代码 = 3840“操作无法完成。(可可错误 3840。)”(JSON 文本没有以数组或对象开头,并且允许未设置片段的选项。)用户信息 = 0x8c56190 {NSDebugDescription=JSON 文本不以数组或对象开头,并且允许未设置片段的选项。

【问题讨论】:

标签: ios objective-c ruby-on-rails parsing afnetworking


【解决方案1】:

根据您得到的错误代码:

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

您的请求或服务器响应似乎不是有效的 JSON。

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

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

到远程主机?你确定你发帖的网址是正确的吗?您是否尝试过在 Postman 之类的工具中测试 url?

【讨论】:

  • 感谢您的回复,但表示正在工作,ruby web 解析方法是否有任何变化,或者 ios 是什么,这是我的问题。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-22
    • 2012-07-20
    • 2017-07-16
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    相关资源
    最近更新 更多