如何使用AFNetworking解析此响应:

时间:2014-11-26 17:23:14

标签: ios null afnetworking

我正在使用AFNetworking从我的网络上的控制器发送和接收响应。控制器正在接收响应并发回其响应,但我的代码正在为其响应对象打印输出(null)。我通过其他方式联系控制器知道正确的响应正在进行中。

我真正的问题是如何让AFNetworking解析奇怪的回应。它主要是html,但它看起来很像xml,但是,它不是真正的xml,你将在下面看到。底线是我如何让AFNetworking只是转储任何响应,而不是忽略它并发布null。

以下是我目前得到的回复:

2014-11-26 09:20:33.473 Airscape Fan Controller[24415:1292131] Response: (null)

以下是我需要解析的响应格式:

fanspd<fanspd>1</fanspd>
doorinprocess<doorinprocess>0</doorinprocess>
timeremaining<timeremaining>0</timeremaining>
macaddr<macaddr>60:CB:FB:99:99:C0</macaddr>
ipaddr<ipaddr>10.0.0.18</ipaddr>
model<model>4.4eWHF</model>
softver: <softver>2.14.2</softver>
interlock1: <interlock1>0</interlock1>
interlock2: <interlock2>0</interlock2>
cfm: <cfm>1100</cfm>
power: <power>25</power>
inside: <house_temp>-99</house_temp>
<DNS1>10.0.0.1</DNS1>
attic: <attic_temp>74</attic_temp>
OA: <oa_temp>-99</oa_temp>
server response: <server_response>ë±(äqûÄýl[í6=sa(2ös’‹Ï</server_response>
DIP Switches: <DIPS>11100</DIPS>
Remote Switch: <switch2>1111</switch2>
Setpoint:<Setpoint>0</Setpoint>

任何关于如何通过AFNetworking获得此响应的想法都将不胜感激。

我目前正在使用这样的AFNetworking处理程序:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager GET:_url parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {

    NSString *string = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
    NSLog(@"Response inline: %@", string);

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];

当我删除以下行时:

NSString *string = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];

我收到以下回复:

<66616e73 70643c66 616e7370 643e323c 2f66616e 7370643e 0a646f6f 72696e70 726f6365 73733c64 6f6f7269 6e70726f 63657373 3e303c2f 646f6f72 696e7072 6f636573 733e0a74 696d6572 656d6169 6e696e67 3c74696d 6572656d 61696e69 6e673e30 3c2f7469 6d657265 6d61696e 696e673e 0a6d6163 61646472 3c6d6163 61646472 3e36303a 43423a46 423a3939 3a39393a 43303c2f 6d616361 6464723e 0a697061 6464723c 69706164 64723e31 302e302e 302e3138 3c2f6970 61646472 3e0a6d6f 64656c3c 6d6f6465 6c3e342e 34655748 463c2f6d 6f64656c 3e0a736f 66747665 723a203c 736f6674 7665723e 322e3134 2e323c2f 736f6674 7665723e 0a696e74 65726c6f 636b313a 203c696e 7465726c 6f636b31 3e303c2f 696e7465 726c6f63 6b313e0a 696e7465 726c6f63 6b323a20 3c696e74 65726c6f 636b323e 303c2f69 6e746572 6c6f636b 323e0a63 666d3a20 3c63666d 3e313830 303c2f63 666d3e0a 706f7765 723a203c 706f7765 723e3635 3c2f706f 7765723e 0a696e73 6964653a 203c686f 7573655f 74656d70 3e2d3939 3c2f686f 7573655f 74656d70 3e0a3c44 4e53313e 31302e30 2e302e31 3c2f444e 53313e0a 61747469 633a203c 61747469 635f7465 6d703e37 373c2f61 74746963 5f74656d 703e0a4f 413a203c 6f615f74 656d703e 2d39393c 2f6f615f 74656d70 3e0a7365 72766572 20726573 706f6e73 653a203c 73657276 65725f72 6573706f 6e73653e 8debb129 e40171fb c4fd6c5b ef363d72 612832f2 148d0c73 0e920c8b 0c180206 cf3c2f73 65727665 725f7265 73706f6e 73653e0a 44495020 53776974 63686573 3a203c44 4950533e 31313130 303c2f44 4950533e 0a52656d 6f746520 53776974 63683a20 3c737769 74636832 3e313131 313c2f73 77697463 68323e0a 53657470 6f696e74 3a3c5365 74706f69 6e743e30 3c2f5365 74706f69 6e743e>

1 个答案:

答案 0 :(得分:0)

感谢Pahnev回复并让我走上正轨。我终于能够发现实际问题是什么。它是响应对象的编码。我必须用正确的方法解码它。

NSString *responseString = [[NSString alloc]initWithData:response encoding:NSASCIIStringEncoding];

重要的是这个:

response encoding:NSASCIIStringEncoding

在使用这个编码之前,我实际上经历了许多不同的编码。现在一切顺利。

希望这有助于那里的人。