代码之家  ›  专栏  ›  技术社区  ›  Den

HttpWebRequest正在初始化-从未收到响应

  •  1
  • Den  · 技术社区  · 15 年前

    this question ). 流位置由IP地址和端口表示。

    以下是SHOUTcast流URL的示例: http://78.159.104.183:80

    我在试着做一个决定 HttpWeb请求 要从流中获取数据:

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://78.159.104.183:80")

    初始化请求后,我将尝试通过异步回调获取响应:

    request.BeginGetResponse(new AsyncCallback(GetShoutAsync), request);
    

    GetShoutAsync如下所示:

    void GetShoutAsync(IAsyncResult res)
    {
         HttpWebRequest request = (HttpWebRequest)res.AsyncState;
         HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(res);
    }
    

    当我构建项目并运行它时,它到达了请求被初始化的点,但是回调被初始化了 .

    我注意到一件有趣的事情—SHOUTcast实现了一种技术,当用户尝试导航到流URL时,服务器会检测到用户代理,如果它是web浏览器,它只会显示一个HTML页面,而不是传递

    http://78.159.104.183:80/;

    然而,在我的应用程序中,我无法得到响应-回调似乎永远无法到达。我试图通过将用户代理直接传递给HttpWebRequest来伪装它:

    request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401 Mozilla/5.0 (X11; U; Linux i686; it-IT; rv:1.9.0.2) Gecko/2008092313 Ubuntu/9.25 (jaunty) Firefox/3.8";
    

    这适用于简单流URL(末尾没有分号)来获取HTML内容,但我无法获取二进制流。

    2 回复  |  直到 8 年前
        1
  •  1
  •   TheWommies    14 年前

    我不知道这是否对你有用,但我也有同样的问题,

    并显式设置

    request.allowreadstream缓冲=假; 请求.方法=“获取”;

    似乎不管什么原因我的回电被炒了。。。

    我不知道为什么。

        2
  •  0
  •   spender    15 年前

    UseUnsafeHeaderParsing 考虑到Shoutcast的片状特性 “HTTP” .

    编辑

    这看起来是一个很好的线索:也许你需要设置 AllowReadStreamBuffering

    这个 属性影响从 BeginGetResponse 方法被调用。当 AllowReadStream缓冲 财产是 true ,则在将整个流下载到内存后引发回调。当 AllowReadStream缓冲 财产是 false ,则在流可用于读取时(可能在所有数据到达之前)立即引发回调。

    AllowReadStream缓冲 是的 . 这意味着您将永远不会点击回调,因为下载永远不会结束(如果离开足够长的时间,您可能会耗尽内存)。设置为 .