请求 addValue: forHTTPHeaderField 获取令牌但不将其发送到 RestKit 中的服务器

Posted

技术标签:

【中文标题】请求 addValue: forHTTPHeaderField 获取令牌但不将其发送到 RestKit 中的服务器【英文标题】:request addValue: forHTTPHeaderField gets the token but does not sends it to server in RestKit 【发布时间】:2013-11-08 08:35:27 【问题描述】:

在我的应用程序中,我必须从我的 API 中获取一个令牌,使用它进行 base 64 编码,然后我必须将它附加到我的所有 api 请求中。

我的现状

使用 AFNetworking,我设置了我的自定义标头“授权”并将我的令牌与我自己的 base 64 编码作为用户名:密码一起发送,(这就是为什么我这样设置它的原因是在 RestKit 中使用 setAuthenticationwithusername:andPassword 方法)。我就是这样打电话的。

NSString *TokenAsaHeaderValue =[NSString stringWithFormat:@"Token %@",EncodedToken];

    AFHTTPClient *httpClient = [[AFHTTPClient alloc]initWithBaseURL:[NSURL URLWithString:@"http://10.11.5.205:xxxx/"]];
    NSMutableURLRequest *request = [httpClient requestWithMethod:@"GET" path:@"/Games/Current/10" parameters:nil];
    [request addValue:TokenAsaHeaderValue forHTTPHeaderField:@"Authorization"];

    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc]initWithRequest:request];
    [httpClient registerHTTPOperationClass:[AFHTTPRequestOperation class]];

    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation*operation,id responseObject)

    
        self.JSONRESULTS = (NSDictionary *)responseObject;
        NSLog(@"print this %@",_JSONRESULTS);
    failure:^(AFHTTPRequestOperation*operation,NSError*error)NSLog(@"Error: %@",error);];
        [operation start];

我的问题

我不确定如何映射它。所以我想在这个电话中使用 RestKit。但是当我使用 nsurlrequest 时,我只能使用 setValue,它不会添加标题。当我尝试将其作为 nsmutableurlrequest 发送并添加值时,这是我得到的响应:

我的试用

使用 RestKit,我将这个 json 映射到应用委托中,然后使用 ObjectManager:

  [[RKObjectManager sharedManager]setValue:TokenAsaHeaderValue forKey:@"Authorization"];

这是我得到的回应:

setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key Authorization.'

(此外,相同的映射工作正常,我能够在我们实现令牌请求之前获取对象。)

什么也有帮助 我如何在没有 RestKit 的情况下仅使用 AFNetworking 进行映射的示例。

感谢您的帮助。

【问题讨论】:

【参考方案1】:

setValue:forKey: 是标准的 KVC 方法,与设置标头无关(反正直接)。

RestKit 在后台使用 AFNetworking,因此可以通过使用您拥有的客户端 (initWithHTTPClient:) 创建对象管理器或获取客户端并对其进行配置 (HTTPClient) 来重用您的配置。

【讨论】:

以上是关于请求 addValue: forHTTPHeaderField 获取令牌但不将其发送到 RestKit 中的服务器的主要内容,如果未能解决你的问题,请参考以下文章

I/O 请求数据包

《Linux内核设计与实现》学习笔记——I/O调度算法

php post请求发送xml 数据 怎么添加请求头

获取具有高 I/O 读取请求的文件名

在 Express 请求中处理 Long I/O 操作的最佳实践

动图了解I/O多路复用