gpt4 book ai didi

c# - 使用仅适用于某些图像的 HttpListener 发送图像

转载 作者:行者123 更新时间:2023-11-30 16:31:45 25 4
gpt4 key购买 nike

我正在尝试创建一个小型 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)通过您的代理站点。 - 使用代理时一定有区别。

此外,为了使 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();
}

关于c# - 使用仅适用于某些图像的 HttpListener 发送图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4659708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com