-
不能直接访问,需要设置
HTTP
请求头
HOST
字段 。
-
标准的
HTTP
协议中服务端会将
HTTP
请求头
HOST
字段的值作为请求的域名信息进行解析。
-
使用
HTTPDNS
后,您可能需要将
HTTP
请求
URL
中的
HOST
字段替换为
HTTPDNS
解析获得的
IP,这时标准的网络库会将您的
IP
赋值给
HTTP
请求头的
HOST
字段,进而导致服务端的解析异常(服务端认可的是您的域名信息,而非
IP
信息)。
-
为了解决这个问题,您可以主动设置
HTTP
请求
HOST
字段的值,如下:
NSString *originalUrl = @"http://www.aliyun.com/";
NSURL* url = [NSURL URLWithString:originalUrl];
NSMutableURLRequest* request = [[NSMutableURLRequest alloc] initWithURL:url];
// 同步接口获取 IP
NSString* ip = [httpdns getIpByHostAsync:url.host];
if (ip) {
// 通过 HTTPDNS 获取 IP 成功,进行 URL 替换和 HOST 头设置
NSRange hostFirstRange = [originalUrl rangeOfString: url.host];
if (NSNotFound != hostFirstRange.location) {
NSString* newUrl = [originalUrl stringByReplacingCharactersInRange:hostFirstRange withString:ip];
request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:newUrl]];
// 设置请求 HOST 字段
[request setValue:url.host forHTTPHeaderField:@"host"];