一、描述

在准备发布网站或调试已上线网站的问题时,有时绕过 CDN 和代理层来请求网站内容会很有帮助,方法是将这些 Web 请求直接发送到特定 IP 地址,而不使用网站的公共 DNS 记录。这种将 Web 请求直接“固定”到服务器的做法通常可以通过更改 /etc/hosts 文件来实现,这将导致对指定域名(例如:“ www.example.com”)的请求从本地计算机路由到指定的 IP 地址(例如:127.0.0.1),直到您对 /etc/hosts 所做的更改被还原。

但是,如果您想将单个请求固定到 IP 地址,而不修改系统的配置文件,该怎么办?幸运的是,这种“临时”绑定可以通过 cURL的命令行实现,它提供了一个特殊 resolve 选项格式 --resolve [DOMAIN]:[PORT]:[IP],它将在执行 cURL 命令期间执行的所有与给定 [DOMAIN] 和 [匹配的 Web 请求路由PORT] 到指定的 [IP] 地址。此选项指定的值(可以在单个命令中多次调用,以将多个域/端口组合路由到不同的 IP 地址)将应用于初始请求,也适用于跟随的重定向请求。

例如:

  1. 如果是使用 http 请求的话,这个很简单,直接加上 -H "Host: {域名}" 就可以了:

    curl -v "Host: www.baidu.com" 180.101.50.242
    
  2. 如果是 https 的话,可以加上 --resolve 选项,也适用于 http 请求 。

    # 格式: curl  -s -v --resolve ${域名}:443:${ip} https://${域名}
    
    curl -s -v --resolve www.baidu.com:443:180.101.50.242 https://www.baidu.com
    

二、参考

  1. Use cURL's "--resolve" option to pin a request to an IP address