【发布时间】:2017-03-10 19:05:49
【问题描述】:
我正在尝试创建一个代理,基于文本的请求得到正确处理(js、css、html)。但是当我尝试加载图像时,我会收到图像包含错误的消息。
我尝试了多种通过 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 发送它。
【问题讨论】:
-
仅查看您的代码和文档,我建议 ASCII 不是正确的编码,因为图像可能包含正常 ASCII 字符集之外的字符。见:msdn.microsoft.com/en-us/library/ms404377(v=vs.110).aspx
-
ASCII 编码仅用于基于文本的请求,我没有使用任何图像。除非 ASCII 可能是默认值
-
您是否有理由按照自己的方式阅读流而不是使用 Image.FromStream()?您可以发布您遇到的错误吗?
-
我这样做的原因是因为图像不是唯一需要处理的东西。例如,还有流式传输,所以我觉得错误更多地在于我处理/转换数据的方式,而不是它是特定于图像的。我也没有收到代码错误。错误是在网页上说图像无法显示,因为它包含错误
标签: c# http tcp proxy httpwebresponse