【问题标题】:Get HttpWebResponse from Html Agility Pack HtmlWeb从 Html Agility Pack HtmlWeb 获取 HttpWebResponse
【发布时间】:2014-08-31 20:49:06
【问题描述】:

HttpWebResponse可以从HTML敏捷包HtmlWeb获得吗?

如果我打电话:

HtmlWeb web = new HtmlWeb ();
HtmlDocument document = web.Load ("http://stackoverflow.com/");

是否有一种方便的方法可以从web 实例中检索HttpWebResponse 以查看标头 - 例如检索内容类型等标头属性?

有 pre 和 post 代表,它们会起作用:

HtmlWeb web = new HtmlWeb ();

web.PreRequest = delegate (HttpWebRequest request) {
    request.Timeout = 10 * 1000;
    return true;
};
web.PostResponse = delegate (HttpWebRequest request, HttpWebResponse response) {
    //response.Headers;
    //response.ContentType;
};

HtmlDocument document = web.Load ("http://stackoverflow.com/");

相反,有没有办法得到类似的响应:(HttpWebResponse)web.GetResponse();

【问题讨论】:

  • 为什么不自己提出请求并将从响应中提取的字符串交给 HAP? HtmlDocument.LoadHtml 是你的朋友。
  • 谢谢 - 这是最有意义的。我会接受的。
  • 嗯...这并不是那么简单,因为检测 HTML 中使用的字符集是一项棘手的工作。我以前做过这个……正在寻找代码。
  • 我会选择@LB 的答案,但为了将来参考,在下载字符串内容时,WebClient.DownloadString 和 DownloadStringAsync 会运行一整套技巧来检测来自内容类型标头的编码charset=...后缀和字节顺序标记。如果您从不同的来源获取数据,会很方便。

标签: c# html-agility-pack httpwebresponse


【解决方案1】:

你可以使用TaskCompletionSource + async/await

var web = new HtmlAgilityPack.HtmlWeb();
var tcs = new TaskCompletionSource<HttpWebResponse>();

web.PostResponse = delegate(HttpWebRequest request, HttpWebResponse response)
{
    tcs.SetResult(response);
};

var  document = web.Load("http://stackoverflow.com/");
var httpWebResponse = await tcs.Task;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多