在写一个工具, 其中一个功能是检测收集服务器的一些信息, 需要在一个操作中取到HTTP headers 信息和 页面的标题(title).
尝试了WebRequest,WebResponse和 HttpWebRequest,HttpWebResponse. 研究他们的不同, 有Http的提供 了对无Http类的 HTTP 特定方法的实现. 关键似乎找不到我的要求”在一次操作中”完成获取到HTTP headers 和 title.
最后突然看到了一段国外代码中用到WebClient, 虽然功能不尽相同, 但又多了一点思路. 进行一翻测试, 发现WebClient十分简便好用, 代码量也骤减. 虽然效率可能会略慢一些,但是做到了一次调用, 取到headers 和 title.
代码如下:
//方法函数 /// <summary> /// 返回 HTTP headers. /// </summary> /// <param name="Url">地址</param> /// <returns>headers的列表</returns> public Dictionary<string, string> GetHTTPResponseHeaders(string url) { Dictionary<string, string> HeaderList = new Dictionary<string, string>(); WebClient x = new WebClient(); x.Headers.Set("Timeout", "6000"); //超时设置6秒 string source = x.DownloadString(url); //用正则表达式取页面标题 string title = Regex.Match(source, @"<titleb[^>]*>s*(?<Title>[sS]*?)</title>", RegexOptions.IgnoreCase).Groups["Title"].Value; HeaderList.Add("Address", url); //加入地址 HeaderList.Add("Title", title); //加入页面标题 foreach (string HeaderKey in x.ResponseHeaders) HeaderList.Add(HeaderKey, x.ResponseHeaders[HeaderKey]); return HeaderList; } //调用 void Button2Click(object sender, EventArgs e) { Dictionary<string, string> Headers = GetHTTPResponseHeaders("http://www.bohu.cn/"); foreach (string HeaderKey in Headers.Keys) textBox5.Text += HeaderKey+" : "+Headers[HeaderKey]+"rn"; }