使用块:
using System;
using System.Net;
using System.Net.Http;
此函数将创建新的 HttpClient 对象,将 http-method 设置为 GET,将请求 URL 设置为函数“Url”字符串参数,并将这些参数应用于 HttpRequestMessage 对象(定义 SendAsync 方法的设置)。最后一行:函数向指定的 url 发送异步 GET http 请求,等待响应消息的 .Result 属性(只是完整响应对象:headers + body/content),获取该完整响应的 .Content 属性(请求正文,没有 http headers),将 ReadAsStringAsync() 方法应用于该内容(这也是某种特殊类型的对象),最后,再次使用 .Result 属性等待此异步任务完成,以获得最终结果字符串,然后返回此字符串作为我们的函数返回。
static string GetHttpContentAsString(string Url)
{
HttpClient HttpClient = new HttpClient();
HttpRequestMessage RequestMessage = new HttpRequestMessage(HttpMethod.Get, Url);
return HttpClient.SendAsync(RequestMessage).Result.Content.ReadAsStringAsync().Result;
}
较短的版本,它不显示我们的 http 请求的完整“转换”路径,并使用 HttpClient 对象的 GetStringAsync 方法。函数只是创建 HttpClient 类的新实例(一个 HttpClient 对象),使用 GetStringAsync 方法将我们的 http 请求的响应正文(内容)作为异步任务结果\承诺,然后使用该异步任务结果的 .Result 属性获取最终字符串,然后简单地将这个字符串作为函数返回返回。
static string GetStringSync(string Url)
{
HttpClient HttpClient = new HttpClient();
return HttpClient.GetStringAsync(Url).Result;
}
用法:
const string url1 = "https://microsoft.com";
const string url2 = "https://stackoverflow.com";
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; /*sets TLC protocol version explicitly to modern version, otherwise C# could not make http requests to some httpS sites, such as https://microsoft.com*/
Console.WriteLine(GetHttpContentAsString(url1)); /*gets microsoft main page html*/
Console.ReadLine(); /*makes some pause before second request. press enter to make second request*/
Console.WriteLine(GetStringSync(url2)); /*gets stackoverflow main page html*/
Console.ReadLine(); /*press enter to finish*/
完整代码: