我以前有一个小的 VBScript,它可以通过发送 GET 请求来测试特定网站是否可以访问。脚本本身非常简单,可以完成我需要的一切:
Function GETRequest(URL) 'Sends a GET http request to a specific URL
Dim objHttpRequest
Set objHttpRequest = CreateObject("MSXML2.XMLHTTP.3.0")
objHttpRequest.Open "GET", URL, False
On Error Resume Next 'Error checking in case access is denied
objHttpRequest.Send
GETRequest = objHttpRequest.Status
End Function
我现在想在扩展的 C# 应用程序中包含此类功能。但是,我一直无法获得与我之前提供的脚本相同的结果。
使用类似于我在下面发布的代码可以获得正确的结果,但如果我的网络连接失败则无法运行。
public static void GETRequest()
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://url");
request.Method = "GET";
HttpStatusCode status;
HttpWebResponse response;
try
{
response = (HttpWebResponse)request.GetResponse();
status = response.StatusCode;
Console.WriteLine((int)response.StatusCode);
Console.WriteLine(status);
}
catch (WebException e)
{
status = ((HttpWebResponse)e.Response).StatusCode;
Console.WriteLine(status);
}
}
但正如我所说,我需要知道站点是否可以访问,而不管原因是什么:门户可能已关闭,或者问题可能出在尝试访问它的 PC 端。不管怎样:我不在乎。
当我在脚本中使用 MSXML2.XMLHTTP.3.0
时,如果我有网络问题。我希望在我的 C# 应用程序中具有相同的功能,这样我至少可以将最少的信息写入日志并让计算机采取相应的行动。有什么想法吗?
最佳答案
您的代码的直接翻译应该是这样的:
static void GetStatusCode(string url)
{
dynamic httpRequest = Activator.CreateInstance(Type.GetTypeFromProgID("MSXML2.XMLHTTP.3.0"));
httpRequest.Open("GET", url, false);
try { httpRequest.Send(); }
catch { }
finally { Console.WriteLine(httpRequest.Status); }
}
它与您的 VBScript 脚本一样小而简单,并使用相同的 COM 对象发送请求。
这段代码很高兴地给我错误代码,如 12029 ERROR_WINHTTP_CANNOT_CONNECT
或 12007 ERROR_WINHTTP_NAME_NOT_RESOLVED
等
关于c# - 在 C# 中发送 http 请求并捕获网络问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11434408/