通过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 地址。
我正在尝试通过 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 地址。