淘房网群发:响应图片流而非图片url,将网站图片保存到本地
以后我要把自己在工作中的经验详细的记录下来,这些东西将会成为我的财富。
上午打算解决获取淘房网上传图片时需要验证码的问题,但是搞了一天还是没有实现,不过部分功能我实现了。
像赶集网,你在地址栏中输入:http://www.ganji.com/common/checkcode.php?nocache=
就会返回一张图片,这是赶集的验证码;但是当我做淘房屋网站时,将抓包找到的url复制到地址栏,什么都没有。
然后经过一上午的分析,要想获取淘房屋的验证码,需要在请求中添加几个cookie,后来终于通过程序返回了
图片,在httpanalyzer的响应中可以看到响应信息仅仅是一张图片。
上午要下班时,王大哥给我说可以把图片保存在本地,然后把这个url发送出去,将图片呈现出来。
下午终于将图片保存到本地成功并且返回绝对路径,但是就不在页面中显示,后来同事提示我可能要该为
相对路径,改后果然好了,但是图片根本看不清,下面就是返回的图片:
然而对于赶集确实下面的样子:
不管怎么样吧,今天是学到了一些东西,学习到了将二进制转为图片保存到本地。
下面是我获取本地图片相对路径的源代码:
#region 获取其他网站验证码图片在本地生成图片并返回相对url /// <summary> /// 获取其他网站验证码图片在本地生成图片并返回相对url /// </summary> /// <param name="httpclient">自定义HttpClient类对象</param> /// <param name="param">动态参数含有房源信息</param> /// <returns>返回本地图片的url</returns> public string GetCheckCodeUrl(HttpClient httpclient, dynamic param) { string url = ""; try { if (string.IsNullOrEmpty(param.validatecode))//如果验证码为空,获取验证码 { httpclient.Url = "http://www.taofw.cn/tool/VerifyImagePage.aspx?id=upfile&user=wangjinhe1&time="; httpclient.Defalutdomain = ".taofw.cn";//需要域名 httpclient.DefaultEncoding = Encoding.GetEncoding("gb2312");//响应头中的编码 //获取验证码比登录多3个cookie,没有这些验证码无法获取图片 httpclient.Context.Cookies.Add(new System.Net.Cookie("AJSTAT_ok_times", "2", "/", ".taofw.cn")); httpclient.Context.Cookies.Add(new System.Net.Cookie("AJSTAT_ok_pages", "4", "/", ".taofw.cn")); httpclient.Context.Cookies.Add(new System.Net.Cookie("OnLineUserInfo", "ok", "/", ".taofw.cn")); byte[] imgBytes = httpclient.GetBytes(); //返回其他网站图片以二进制保存 string relaPath="~/temp/" + DateTime.Now.Year + "/" + DateTime.Now.Month + "/" + DateTime.Now.Day + "/"; //相对文件夹路径 string dicPath = HttpContext.Current.Server.MapPath(relaPath); //文件夹的绝对路径 string fileName = new Random(DateTime.Now.Millisecond).Next() + ".jpg";//文件名 if (!Directory.Exists(dicPath))//如果路径不存在 { Directory.CreateDirectory(dicPath);//创建文件夹 } string filePath = dicPath + fileName ;//图片绝对路径 FileStream fileStream = new FileStream(filePath, FileMode.Create); //按照新路径创建新文件 BinaryWriter biWriter = new BinaryWriter(fileStream);//二进制写入流 biWriter.Write(imgBytes);//将图片字节写入文件流 biWriter.Close(); fileStream.Close(); url =relaPath + fileName;//文件相对路径 } } catch (Exception ex) { throw ex; } return url; } #endregion
工作中的心态很重要,心态好,容易找到问题。我是昨天才想清楚一个问题的,我为什么要学习?
其实我学习的目的就是为了工作,我是为了工作需要而学习,不是为了学习而学习,想一下,
如果你学习的东西没有用到,这不是很悲剧吗?
第二天经理打电话问工作进度,他说我的Url可能有问题,后来王大哥把"~/temp/"改为"/temp/"之后就正常了。
有关路径问题,有一篇好文章:http://www.cnblogs.com/Laeb/archive/2006/12/05/583046.html