【问题标题】:How do I check for binary vs. text in an HttpWebRequest in c#?如何在 c# 中检查 HttpWebRequest 中的二进制与文本?
【发布时间】:2013-04-13 09:07:39
【问题描述】:

有没有办法确定来自 C# 中 HttpWebRequest 的响应是否包含二进制数据和文本?还是我应该使用其他类或函数来执行此操作?

这里有一些示例代码。如果内容不是文本,我想在阅读 StreamReader 之前知道。

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.someurl.com");
request.Method = WebRequestMethods.Http.Get;
using (WebResponse response = request.GetResponse())
{
    // check somewhere in here if the response is binary data and ignore it 
    using (StreamReader reader = new StreamReader(response.GetResponseStream()))
    {
        string responseDetails = reader.ReadToEnd().Trim();
    }
}

【问题讨论】:

  • 是否会在您的回复中检查ContentType,看看它是否是您对处理工作数据感兴趣的类型之一?
  • 我正在考虑这样做,但不确定这有多安全。就像 Web 服务器可以在 http 标头中返回内容类型的文本并仍然返回二进制数据一样。
  • 这完全有可能,但我希望这是一个非常罕见的情况
  • 如果您不想依赖ContentType 标签,根据我的直觉,您无法在不实际阅读内容的情况下确定内容是什么,然后检查一些控制字符以假设为漂亮很有可能,您有一些二进制数据,因为在文本内容中获得许多不可打印字符的可能性很小。

标签: c# httpwebrequest httpwebresponse getresponsestream


【解决方案1】:

一般而言,网站会在 Content-Type 标头中告诉您它们返回的数据类型。您可以通过从响应中获取 ContentType 属性来确定。

但众所周知,网站会撒谎。或者什么都不说。两个我都见过。如果没有 Content-Type 标头,或者您不想信任它,那么您可以通过阅读它来判断那里的数据类型的唯一方法。

但是,如果您不信任该站点,您为什么要从中读取数据?

【讨论】:

  • 我无法提供详细信息,但我可以向您保证,我需要阅读数据,并且我不信任该网站。我会走读取数据的路线。我找到了一些关于从流中检查 mime 类型的信息。
  • 我建议将其读取为二进制文件,然后检查数据。开始时您可能只阅读 1 KB 左右就可以逃脱惩罚。这通常足以告诉您它是什么。
  • 谢谢。我最终使用此解决方案从前 256 个字节中查找 mime 类型:stackoverflow.com/questions/58510/…。我会接受您的回答作为解决方案,因为您让我指出了正确的方向。如果您不介意,请将上面的链接添加到您的答案中。再次感谢
猜你喜欢
  • 2013-01-15
  • 1970-01-01
  • 2017-06-18
  • 1970-01-01
  • 2010-09-22
  • 2021-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多