全部产品
云市场
    HTTPDNS Android SDK: 可以使用 IP 代替域名直接访问吗 ?

HTTPDNS Android SDK: 可以使用 IP 代替域名直接访问吗 ?

更新时间:2020-03-18 13:48:29

  • 不能直接访问,需要设置 HTTP 请求头 HOST 字段 。
  • 标准的 HTTP 协议中服务端会将 HTTP请求头 HOST 字段 的值作为请求的域名信息进行解析。
  • 使用 HTTPDNS 后,您可能需要将 HTTP 请求 URL 中的 HOST字段 替换为 HTTPDNS 解析获得的 IP,这时标准的网络库会将您的 IP 赋值给 HTTP请求头 的 HOST 字段,进而导致服务端的解析异常(服务端认可的是您的域名信息,而非IP信息)。
  • 为了解决这个问题,您可以主动设置 HTTP 请求 HOST 字段 的值,如下:
    1. String originalUrl = "http://www.aliyun.com/";
    2. URL url = new URL(originalURL);
    3. String originalHost = url.getHost();
    4. // 异步接口获取 IP
    5. String ip = httpdns.getIpsByHostAsync(originalHost);
    6. HttpURLConnection conn;
    7. if (ip != null) {
    8. // 通过HTTPDNS获取IP成功,进行URL替换和HOST头设置
    9. url = new URL(originalUrl.replaceFirst(originalHost, ip));
    10. conn = (HttpURLConnection) url.openConnection();
    11. // 设置请求HOST字段
    12. conn.setRequestProperty("Host", originHost);
    13. } else {
    14. conn = (HttpURLConnection) url.openConnection();
    15. }