通过ip地址访问网站

Access website by ipaddress

我正在尝试通过 ip 地址而不是 http 地址访问网站。我正在尝试一些众所周知的站点,例如 Microsoft 和 google,并通过 ping 获取它们的 IP 地址。例如 184.87.106.199 是微软,216.58.221.68 是 google.

    async Task<HttpStatusCode> RequestPage(string url, HttpClient client) {
        var request = new HttpRequestMessage();

        try {
            var response = await client.GetAsync("http://" + url);

            Console.WriteLine(string.Format("{0} - {1}", url, response.StatusCode.ToString()));

            return response.StatusCode;
        } catch (TaskCanceledException) {
            Console.WriteLine(string.Format("{0} - Timeout", url));

            return HttpStatusCode.GatewayTimeout;
        }
    }

但是它似乎并不适用于每个站点。如果我请求 http://216.58.221.68,google 工作正常,但微软 returns 请求状态错误。

我错过了什么?

您无法根据 IP 地址可靠地访问网站。服务器通常配置为在单个 IP 地址上托管多个网站,并且基于 URL 它将提供正确的网站。

当您使用浏览器向网站发出 HTTP 请求时,浏览器本身会查找 IP 地址,然后进行连接。但是,您的浏览器将发送如下内容:

GET http://whosebug.com/ HTTP/1.1
Host: whosebug.com

这意味着远程端知道将您发送到哪个网站,因为服务器可能托管许多网站,尤其是在共享托管环境中。

此外,更复杂的是,一些网站会有多个 IP 地址。