AFNetworking:接收“数字”而不是GET请求文本

时间:2014-10-03 04:50:54

标签: ios objective-c afnetworking afnetworking-2

我正在尝试使用AFHTTPRequestOperationManager和AFHTTPResponseSerializer设置GET请求。但是,我收到了很多随机数,而不是收到正确的GET请求响应(就像我使用Charles调试代理那样)。我试图使用这个主题的解决方案(AFNetworking - JSON: Receiving "numbers" instead of JSON),但由于我的字典为空,我没有成功。

GET /scripts/wsisa.dll/WService=wsedumeritasil/seplog01 HTTP/1.1
Host: skyward.iscorp.com
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Proxy-Connection: keep-alive
Cookie: BIGipServerSkywardPool18-Meritas=4200349962.47873.0000; BIGipServerSkywardWebspeed=2388410634.47873.0000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit/600.1.25 (KHTML, like Gecko) Version/8.0 Safari/600.1.25
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: keep-alive

这是我的代码:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
AFHTTPResponseSerializer *serializer = [AFHTTPResponseSerializer serializer];
serializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
manager.responseSerializer = serializer;
manager.requestSerializer = [AFJSONRequestSerializer serializer] ;
NSDictionary *dict = @{
                       @"Host" : @"skyward.iscorp.com",
                       };
[manager GET:@"https://skyward.iscorp.com/scripts/wsisa.dll/WService=wsedumeritasil/seplog01"
  parameters:dict
     success:^(AFHTTPRequestOperation *operation, id responseObject) {
         NSLog(@"%@", responseObject);
         NSError *error;
         NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:&error];
      NSLog(@"Dictionary: %@", [jsonDict description]);   
     }
     failure:^(AFHTTPRequestOperation *operation, NSError *error) {
         NSLog(@"error");
     }];

这是我的输出:

<3c21444f 43545950 45204854 4d4c2050 55424c49 4320222d 2f2f5733 432f2f44 54442048 ...
Dictionary: (null)

1 个答案:

答案 0 :(得分:3)

十六进制数字的长序列只是NSData的标准十六进制表示。如果将NSData的十六进制表示形式转换为字符串,则可以看到它:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD H

这似乎是HTML页面的开头。

如果您记录responseObject,而不是记录[[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding],则会看到您意外检索到的HTML网页的完整内容。

您正在使用AFHTTPResponseSerializer(我猜你因为AFJSONResponseSerializer无法正常工作?)这一事实似乎支持这一假设。一般来说,如果你收到JSON回复,你会坚持使用AFJSONResponseSerializer(这会为你做JSONObjectWithData)。

您应该与Web服务提供商确认API,确保您已执行必要的身份验证和/或正确使用API​​。很明显,请求没有很好地形成,或者URL不正确或者没有进行必要的身份验证。