2017-03-10 49 views
0

我正在尝试创建代理,基于文本的请求得到正确处理(js,css,html)。但是当我尝试加载图像时,我收到图像包含错误的消息。如何通过http传输图像

我已经尝试了多种方式发送这个通过http,但他们都没有工作。下面是相关代码

try 
     { 
      StringBuilder responseString = new StringBuilder(); 
      HttpWebRequest clientRequest = (HttpWebRequest)WebRequest.Create(url); 
      HttpWebResponse response = (HttpWebResponse)clientRequest.GetResponse(); 
      string headers = response.Headers.ToString(); 
      string contentType = response.Headers.Get("content-type"); 
      var encoding = ASCIIEncoding.ASCII; 
      if (contentType.IndexOf("image") > -1) 
      { 
       using (BinaryReader stream = new BinaryReader(response.GetResponseStream())) 
       { 
        var bytes = new byte[1024]; 
        while (true) 
        { 
         var n = stream.Read(bytes, 0, bytes.Length); 
         if (n == 0) 
         { 
          break; 
         } 
         responseString.Append(bytes); 
        } 
        return "HTTP/1.1 200 \n" + headers + responseString.ToString(); 
       } 
      } 
      else 
      { 
       using (var reader = new System.IO.StreamReader(response.GetResponseStream(), encoding)) 
       { 

        return "HTTP/1.1 200 \n" + headers + reader.ReadToEnd(); 
       } 
      } 
     catch 
     { 
      addToList("Request failed"); 
      return "Request failed"; 
     } 
    } 

如果可能的话我宁愿保持HTTP响应绳子,让我在现有的NetworkStream发送。

+0

只看你的代码和文档,我建议ASCII不是正确的编码,因为图像可能包含正常的ASCII字符集以外的字符。请参阅:https://msdn.microsoft.com/en-us/library/ms404377(v=vs.110).aspx –

+0

ASCII编码仅用于基于文本的请求,我没有使用图像。除非可能ASCII是默认的 –

+0

是否有一个原因,你正在阅读流的方式,而不是使用Image.FromStream()?你能发布你得到的错误吗? –

回答

0

解决方案是将响应直接传输到客户端,而不是先将其转换为字符串。标题在之前以字符串形式发送。