c#-使用HttpListener发送图像仅适用于某些图像
作者:互联网
我正在尝试创建一个小的http代理服务.这不是很好.它可以提供HTML正常功能,但会阻塞图像.即,一些图像.
通过我的代理发送一个url会在响应中产生19.4 kb(根据firebug)
同样,根据firebug,直接访问该URL也会在响应中产生19.4 kb.区别在于,当我通过代理将其显示时,它不会显示,但是当我直接浏览时,它会显示.
完全不同的url可以正常工作.有人有什么主意吗?
private void DoProxy()
{
var http = listener.GetContext();
string url = http.Request.QueryString["url"];
WebRequest request = HttpWebRequest.Create(url);
WebResponse response = request.GetResponse();
http.Response.ContentType = response.ContentType;
byte[] content;
using (Stream responseStream = response.GetResponseStream())
content = ReadAll(responseStream);
http.Response.ContentLength64 = content.Length;
http.Response.OutputStream.Write(content, 0, content.Length);
http.Response.Close();
}
private byte[] ReadAll(Stream stream)
{
IList<byte> array = new List<byte>();
int b;
while ((b = stream.ReadByte()) != -1)
array.Add(Convert.ToByte(b));
return array.ToArray();
}
解决方法:
在关闭响应之前,我会尝试刷新/关闭OutputStream.
另外一个建议是,查看原始站点的HTTP流量,然后使用HTTP调试器(如Fiddler)通过代理站点,查看HTTP流量-使用代理时一定有所不同.
另外,为了使ReadAll方法更有效,通常,我将避免将全部内容加载到内存中,因为这会在庞大的文件上爆炸-只需将它们直接从输入流传输到输出流即可.如果仍然要使用字节数组,请考虑以下内容(未经测试,但应该可以使用):
private byte[] ReadAll(Stream stream)
{
byte[] buffer = new byte[8192];
int bytesRead = 1;
List<byte> arrayList = new List<byte>();
while (bytesRead > 0)
{
bytesRead = stream.Read(buffer, 0, buffer.Length);
arrayList.AddRange(new ArraySegment<byte>(buffer, 0, bytesRead).Array);
}
return arrayList.ToArray();
}
标签:httplistener,c 来源: https://codeday.me/bug/20191208/2094400.html