我刚从 ASIHTTPRequest 切换到 AFNetworking。
我的应用程序允许用户输入搜索词,然后我对我的服务器 (rails) 进行 api 调用以检索要在手机上显示的相关对象列表。很简单。
太长了,看不懂
使用 ASI 库,发送到服务器的搜索词将类似于st%20helena
. 现在,使用 AFNetworking,我发送到服务器的搜索词是st%2520helena
. 奇怪的是,这实际上有所作为。使用%20
,我没有收到任何结果。使用%2520
,我收到了我期望的结果。
我的问题是,为什么这会有所作为?我知道这%2520
是一个编码的 '%' + 20,它等于一个空格字符,在我看来应该与 pass 相同%20
。
细节
之前,我只是在第一次编码后将搜索词附加到 URL:
NSString *encoded = [@"st helena" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *url = [NSString stringWithFormat:@"http://www.example.com/?=%@, encoded];
parameters
现在,使用AFNetworking ,我将 NSDictionary 传递给AFHTTPClient#getPath
.
NSString *encoded = [@"st helena" stringByAddingPercentEscapesUsingEncoding:NSUTR8StringEncoding];
NSDictionary *dict = @{ @"q" : encoded };
[[myClient sharedClient] getPath:@"" parameters:dict ...]
由于 AFNetworking 对字典中的项目进行编码,我的搜索字符串被双重编码,这就是为什么 '%20' 的 % 被转换为 '%25' 的原因。