我正在尝试使用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)
答案 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不正确或者没有进行必要的身份验证。