【发布时间】:2011-01-11 16:08:08
【问题描述】:
我正在尝试创建一个小型 http 代理服务。这不是很好。它能够提供 HTML 还可以,但它会阻塞图像。也就是一些图片。
通过我的代理发送一个 url 在响应中产生 19.4 kb(根据 firebug) 再次根据 firebug 的说法,直接访问该 url 也会在响应中产生 19.4 kb。不同的是,当我通过代理放置它时它不会显示,但当我直接浏览时它会显示。
完全不同的网址也可以正常工作。有人知道吗?
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();
}
【问题讨论】:
-
附带说明 - 您不应该一次读取 ReadAll 中的原始流一个字节,这是非常无效的
-
在您关闭响应之前,我会尝试刷新/关闭
OutputStream -
@BrokenGlass 嗯,我还能怎么做?不保证在标头中提供 Content-Length。 Read 方法需要一个数组和一个读取计数 - 如果请求响应大于我选择的缓冲区大小,那么调整/更改数组的大小很麻烦?
-
在下方添加了回复以解决此问题
标签: c# httplistener