这是我见过的最奇怪的事了。我有一部iPhone 5和一部iPhone 5s,都安装了iOS 7.1.2,完全没问题。我运行以下代码:
NSString *userAgent = @"Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3";
NSURL *url = [NSURL URLWithString: deviceString];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url];
[request setValue:userAgent forHTTPHeaderField:@"User-Agent"];
NSHTTPURLResponse *response = nil;
NSError *error = nil;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSDictionary *dict = [response allHeaderFields];
NSLog(@"Status code: %d",[response statusCode]);
NSLog(@"Headers:n %@",dict.description);
NSLog(@"Error: %@",error.description);
NSLog(@"Response data: %@",[[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]);
iPhone 5s返回我正在寻找的正确的页面源,并且与我从模拟器获得的相同。标题看起来像这样:
"Alternate-Protocol" = "80:quic";
"Cache-Control" = "no-cache";
"Content-Encoding" = gzip;
"Content-Length" = 5627;
"Content-Type" = "text/plain; charset=utf-8";
Date = "Fri, 01 Aug 2014 17:21:40 GMT";
Expires = "Tue, 27 Apr 1971 19:44:06 EST";
P3P = "CP="This is not a P3P policy! See http://support.google.com/accounts/bin/answer.py?answer=151657&hl=en for more info."";
Server = "gwiseguy/2.0";
"Set-Cookie" = "YSC=oohlyqgkgwg; path=/; domain=.youtube.com; httponly";
"X-Content-Type-Options" = nosniff;
"X-Frame-Options" = SAMEORIGIN;
"X-XSS-Protection" = "1; mode=block; report=https://www.google.com/appserve/security-bugs/log/youtube";
iPhone 5返回的是不同的东西,从Content-Length header中可以看到,它明显更短:
"Alternate-Protocol" = "80:quic";
"Cache-Control" = "no-cache";
"Content-Length" = 767;
"Content-Type" = "text/html; charset=utf-8";
Date = "Fri, 01 Aug 2014 17:23:06 GMT";
Expires = "Tue, 27 Apr 1971 19:44:06 EST";
P3P = "CP="This is not a P3P policy! See http://support.google.com/accounts/bin/answer.py?answer=151657&hl=en for more info."";
Server = "gwiseguy/2.0";
"Set-Cookie" = "YSC=2KFSqyO4p1k; path=/; domain=.youtube.com; httponly";
"X-Content-Type-Options" = nosniff;
"X-Frame-Options" = SAMEORIGIN;
"X-XSS-Protection" = "1; mode=block; report=https://www.google.com/appserve/security-bugs/log/youtube";
我困惑。
编辑:我现在发现一个iPhone 5可以正常工作,一个iPhone 5s不能!?我们在同样的wifi网络上进行测试,但这些手机分别使用at&t和Verizon的服务。1 . Verizon在工作,其他的则不行。所有的at&t都在工作。
更新:我已经解决了这个问题。现在我需要一些帮助来理解我做了什么:/我注意到标题之间的区别是行"Content-Encoding" = gzip
,所以我在代码中设置了这行:
[request setValue:@"gzip" forHTTPHeaderField:@"Content-Encoding"];
现在请求按预期工作,但为什么我需要这样做?
我注意到标题之间的区别是"Content-Encoding" = gzip这行,所以我在代码中设置了这行:
[request setValue:@"gzip" forHTTPHeaderField:@"Content-Encoding"];