利用HttpWebRequest/HttpWebResponse获得指定url资源的一个问题
2006-02-20 13:38
1041 查看
前阵子帮朋友找图片,写了个小程序抓图片资源。但是过程中碰到了个小问题。通过HttpWebResponse.GetResponseStream()获得的流保存成文件却显示不出原来的图片。
Uri myUri = new Uri(“http://www.xxx.com/xx.jpg");
HttpWebRequest myWebRequest= (HttpWebRequest)WebRequest.Create(myUri);
myWebRequest.Method = "GET";
HttpWebResponse myWebResponse= (HttpWebResponse)myWebRequest.GetResponse();
StreamReader reader = new StreamReader(myWebResponse.GetResponseStream(),Encoding.ASCII);
byte[] buffer = Encoding.ASCII.GetBytes(reader.ReadToEnd());
FileInfo file = new FileInfo(@"C:\xxx.jpg");
BinaryWriter writer = new BinaryWriter(file.Open(FileMode.Create, FileAccess.Write));
writer.Write(buffer, 0, buffer.Length);
writer.Close();
开始用Encoding.Default,取出来的字节流长度(buffer.Length)和原始图片的长度(myWebRequest.ContentLength)都不符,很明显是Encoder的问题,换了ASCII,长度一致了,但是还是无法显示。把Reader对象Reflect了一下,又看了以下Encoding.ASCII,发现其GetBytes里有这么一段:
while (charIndex < num1)
{
char ch1 = chars[charIndex++];
if (ch1 >= '\x0080')
{
ch1 = '?';
}
bytes[byteIndex++] = (byte) ch1;
}
原来的字节流并不是原封不动的被保存了,结果肯定会无法显示正常的图片。
没办法只好换了个办法,直接用Bitmap对象来保存图片。虽然结果是没问题了。但是之前的这种保存方式难道就完全不可行了吗?不知道哪位高人可以给一个正解。
Uri myUri = new Uri(“http://www.xxx.com/xx.jpg");
HttpWebRequest myWebRequest= (HttpWebRequest)WebRequest.Create(myUri);
myWebRequest.Method = "GET";
HttpWebResponse myWebResponse= (HttpWebResponse)myWebRequest.GetResponse();
StreamReader reader = new StreamReader(myWebResponse.GetResponseStream(),Encoding.ASCII);
byte[] buffer = Encoding.ASCII.GetBytes(reader.ReadToEnd());
FileInfo file = new FileInfo(@"C:\xxx.jpg");
BinaryWriter writer = new BinaryWriter(file.Open(FileMode.Create, FileAccess.Write));
writer.Write(buffer, 0, buffer.Length);
writer.Close();
开始用Encoding.Default,取出来的字节流长度(buffer.Length)和原始图片的长度(myWebRequest.ContentLength)都不符,很明显是Encoder的问题,换了ASCII,长度一致了,但是还是无法显示。把Reader对象Reflect了一下,又看了以下Encoding.ASCII,发现其GetBytes里有这么一段:
while (charIndex < num1)
{
char ch1 = chars[charIndex++];
if (ch1 >= '\x0080')
{
ch1 = '?';
}
bytes[byteIndex++] = (byte) ch1;
}
原来的字节流并不是原封不动的被保存了,结果肯定会无法显示正常的图片。
没办法只好换了个办法,直接用Bitmap对象来保存图片。虽然结果是没问题了。但是之前的这种保存方式难道就完全不可行了吗?不知道哪位高人可以给一个正解。
相关文章推荐
- 解决httpwebrequest无法通过使用代理的局域网获取response的问题
- 利用WebResource.axd通过一个URL来访问装配件的内置资源
- 利用HttpWebRequest和HttpWebResponse做黑客注射工具
- WP开发 - HttpWebRequest的GetResponse或GetRequestStream的超时问题
- Url以.(点)结尾,在使用httpwebrequest读取的时候,微软会有一个bug……
- 使用HttpWebRequest获得URL的返回值
- 一个使用HttpWebRequest类下载指定URL网页的例子
- 利用WebResource.axd通过一个URL来访问装配件的内置资源
- C#利用HttpWebRequest,Stream,HttpWebResponse,StreamReader获取post返回的数据
- 利用HttpWebRequest和HttpWebResponse获取Cookie并实现模拟登录
- 利用WebResource.axd通过一个URL来访问装配件的内置资源
- vs.net2003的一个老问题“你试图打开的项目是Web项目,请指定URL路径”解决办法
- Web HttpServletRequest的getRequestURL方法获取不到https协议请求问题
- 利用HttpWebRequest和HttpWebResponse获取Cookie并实现模拟登录
- 利用WebResource.axd通过一个URL来访问装配件的内置资源
- C# 利用 HttpWebRequest 和 HttpWebResponse 模拟登录有验证码的网站
- (转)利用HttpWebRequest上传文件应该注意的问题
- 利用HttpWebRequest请求url路径返回json结果对象
- 利用WebResource.axd通过一个URL来访问装配件的内置资源
- 利用HttpWebRequest和HttpWebResponse获取Cookie