How to test a HTTPS URL with a given IP address
Solution 1:
Think I found a solution going through the cURL manual:
curl https://DOMAIN.EXAMPLE --resolve 'DOMAIN.EXAMPLE:443:192.0.2.17'
Added in [curl] 7.21.3. Removal support added in 7.42.0.
from CURLOPT_RESOLVE explained
Solution 2:
Here is the man
entry for the currently most upvoted answer since they only included a link to the programmatic component:
--resolve <host:port:address>
Provide a custom address for a specific host and port pair. Using
this, you can make the curl requests(s) use a specified address and
prevent the otherwise normally resolved address to be used. Consider
it a sort of /etc/hosts alternative provided on the command line.
The port number should be the number used for the specific protocol
the host will be used for. It means you need several entries if you
want to provide address for the same host but different ports.
The provided address set by this option will be used even if -4,
--ipv4 or -6, --ipv6 is set to make curl use another IP version.
This option can be used many times to add many host names to resolve.
Added in 7.21.3.
But due to the limitation given ("It means you need several entries if you want to provide address for the same host but different ports."), I would consider another, newer option that can translate both at the same time:
--connect-to <HOST1:PORT1:HOST2:PORT2>
For a request to the given HOST:PORT pair, connect to
CONNECT-TO-HOST:CONNECT-TO-PORT instead. This option is suitable
to direct requests at a specific server, e.g. at a specific cluster
node in a cluster of servers. This option is only used to establish
the network connection. It does NOT affect the hostname/port that
is used for TLS/SSL (e.g. SNI, certificate verification) or for
the application protocols. "host" and "port" may be the empty string,
meaning "any host/port". "connect-to-host" and "connect-to-port"
may also be the empty string, meaning "use the request's original host/port".
This option can be used many times to add many connect rules.
See also --resolve and -H, --header.
Added in 7.49.0.
Solution 3:
You can change in /etc/hosts to make the server think that the domain is located at a certain IP.
This is the syntax:
192.168.10.20 www.domain.tld
This will make cURL use the IP-address you want without the SSL-certificate to break.
Solution 4:
If you're running curl in Windows, use double quotes
curl https://DOMAIN.TLD --resolve "DOMAIN.TLD:443:IP_ADDRESS"
curl DOMAIN.TLD --resolve "DOMAIN.TLD:80:IP_ADDRESS"
You can skip the scheme/protocol up front, but you can't skip the port number in the --resolve string.