淘房网群发:响应图片流而非图片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

posted @ 2012-10-18 17:26  金河  阅读(631)  评论(1编辑  收藏  举报