这段时间在学习模拟登陆网站,已经能实现登陆百度,获取所有喜欢贴吧,一键签到等。         目前遇到几个问题想大家帮忙解决下:         1.百度有时候登陆太频繁会出现验证码,这个要如何获取该验证码图片并下载?         2.我想实现上传百度头像的功能,这个完全没有头绪,想让大家有谁愿意看看,给我讲讲,谢谢了!C# httpwebrequest 验证码 httpwebrequest

解决方案 »

  1.   

       1.百度验证码防伪很厉害,基本无解。每次登陆修改IP代理,可实现验证码不弹出访问
       2.头像上传,跟模拟登录差不多,可用webbrowser来实现。
      

  2.   

    首先用抓包工具抓下数据包,然后用httpwebrequest模拟http方式发送请求就好
      

  3.   

    再顶
    求解百度上传头像,那个post的数据我看了好久都看不明白,求解啊
      

  4.   


    见到有人做的,他是把百度验证码的图片下载下来显示的,不清楚怎么弄---------------
    下载下来了有什么用,不一样要识别图片?using System;  
    using System.Collections.Generic;  
    using System.Text;  
    using System.Collections;  
    using System.Drawing;  
    using System.Drawing.Imaging;  
    using System.Runtime.InteropServices;  
     
    namespace BallotAiying2  
    {  
    class UnCodebase  
    {  
    public Bitmap bmpobj;  
    public UnCodebase(Bitmap pic)  
    {  
    bmpobj=new Bitmap(pic);//转换为Format32bppRgb  
    }  
     
    /**////<summary> 
    ///根据RGB,计算灰度值  
    ///</summary> 
    ///<paramnameparamname="posClr">Color值</param> 
    ///<returns>灰度值,整型</returns> 
    private int GetGrayNumColor(System.Drawing.Color posClr)  
    {  
    return (posClr.R*19595+posClr.G*38469+posClr.B*7472)>>16;  
    }  
     
    /**////<summary> 
    ///灰度转换,逐点方式  
    ///</summary> 
    public void GrayByPixels()  
    {  
    for(int i=0;i<bmpobj.Height;i++)  
    {  
    for(int j=0;j<bmpobj.Width;j++)  
    {  
    int tmpValue=GetGrayNumColor(bmpobj.GetPixel(j,i));  
    bmpobj.SetPixel(j,i,Color.FromArgb(tmpValue,tmpValue,tmpValue));  
    }  
    }  
    }  
    /**////<summary> 
    ///去图形边框  
    ///</summary> 
    ///<paramnameparamname="borderWidth"></param> 
    public void ClearPicBorder(int borderWidth)  
    {  
    for(int i=0;i<bmpobj.Height;i++)  
    {  
    for(int j=0;j<bmpobj.Width;j++)  
    {  
    if(i<borderWidth||j<borderWidth||j>bmpobj.
    Width-1-borderWidth||i>bmpobj.Height-1-borderWidth)  
    bmpobj.SetPixel(j,i,Color.FromArgb(255,255,255));  
    }  
    }  
    }  
     
    /**////<summary> 
    ///灰度转换,逐行方式  
    ///</summary> 
    public void GrayByLine()  
    {  
    Rectangle rec=new Rectangle(0,0,bmpobj.Width,bmpobj.Height);  
    BitmapData bmpData=bmpobj.LockBits(rec,ImageLockMode.ReadWrite,bmpobj.PixelFormat);
    //PixelFormat.Format32bppPArgb);  
    //bmpData.PixelFormat=PixelFormat.Format24bppRgb;  
    IntPtr scan0=bmpData.Scan0;  
    int len=bmpobj.Width*bmpobj.Height;  
    int []pixels=ne wint[len];  
    Marshal.Copy(scan0,pixels,0,len);  
     
    //对图片进行处理  
    int GrayValue=0;  
    for(inti=0;i<len;i++)  
    {  
    GrayValue=GetGrayNumColor(Color.FromArgb(pixels[i]));  
    pixels[i]=(byte)(Color.FromArgb(GrayValue,GrayValue,GrayValue)).ToArgb();  
    }  
     
    bmpobj.UnlockBits(bmpData);  
    }  
     
    /**////<summary> 
    ///得到有效图形并调整为可平均分割的大小  
    ///</summary> 
    ///<paramnameparamname="dgGrayValue">灰度背景分界值</param> 
    ///<paramnameparamname="CharsCount">有效字符数</param> 
    ///<returns></returns> 
    public void GetPicValidByValue(int dgGrayValue,int CharsCount)  
    {  
    intpos x1=bmpobj.Width;intposy1=bmpobj.Height;  
    intpos x2=0;intposy2=0;  
    for(int i=0;i<bmpobj.Height;i++)//找有效区  
    {  
    for(int j=0;j<bmpobj.Width;j++)  
    {  
    int pixelValue=bmpobj.GetPixel(j,i).R;  
    if(pixelValue<dgGrayValue)//根据灰度值  
    {  
    if(posx1>j)posx1=j;  
    if(posy1>i)posy1=i;  
     
    if(posx2<j)posx2=j;  
    if(posy2<i)posy2=i;  
    };  
    };  
    };  
    //确保能整除  
    int Span=CharsCount-(posx2-posx1+1)%CharsCount;//可整除的差额数  
    if(Span<CharsCount)  
    {  
    int leftSpan=Span/2;//分配到左边的空列,如span为单数,则右边比左边大1  
    if(posx1>leftSpan)  
    posx1=posx1-leftSpan;  
    if(posx2+Span-leftSpan<bmpobj.Width)  
    posx2=posx2+Span-leftSpan;  
    }  
    //复制新图  
    Rectangle cloneRect=new Rectangle(posx1,posy1,posx2-posx1+1,posy2-posy1+1);  
    bmpobj=bmpobj.Clone(cloneRect,bmpobj.PixelFormat);  
    }  
     
    /**////<summary> 
    ///得到有效图形,图形为类变量  
    ///</summary> 
    ///<paramnameparamname="dgGrayValue">灰度背景分界值</param> 
    ///<paramnameparamname="CharsCount">有效字符数</param> 
    ///<returns></returns> 
    public void GetPicValidByValue(int dgGrayValue)  
    {  
    int posx1=bmpobj.Width;int posy1=bmpobj.Height;  
    int posx2=0;int posy2=0;  
    for(int i=0;i<bmpobj.Height;i++)//找有效区  
    {  
    for(int j=0;j<bmpobj.Width;j++)  
    {  
    int pixelValue=bmpobj.GetPixel(j,i).R;  
    if(pixelValue<dgGrayValue)//根据灰度值  
    {  
    if(posx1>j)posx1=j;  
    if(posy1>i)posy1=i;  
     
    if(posx2<j)posx2=j;  
    if(posy2<i)posy2=i;  
    };  
    };  
    };  
    //复制新图  
    Rectangle cloneRect=new Rectangle(posx1,posy1,posx2-posx1+1,posy2-posy1+1);  
    bmpobj=bmpobj.Clone(cloneRect,bmpobj.PixelFormat);  
    }  
     
    /**////<summary> 
    ///得到有效图形,图形由外面传入  
    ///</summary> 
    ///<paramnameparamname="dgGrayValue">灰度背景分界值</param> 
    ///<paramnameparamname="CharsCount">有效字符数</param> 
    ///<returns></returns> 
    public Bitmap GetPicValidByValue(Bitmap singlepic,int dgGrayValue)  
    {  
    int posx1=singlepic.Width;int posy1=singlepic.Height;  
    int posx2=0;int posy2=0;  
    for(int i=0;i<singlepic.Height;i++)//找有效区  
    {  
    for(int j=0;j<singlepic.Width;j++)  
    {  
    int pixelValue=singlepic.GetPixel(j,i).R;  
    if(pixelValue<dgGrayValue)//根据灰度值  
    {  
    if(posx1>j)posx1=j;  
    if(posy1>i)posy1=i;  
     
    if(posx2<j)posx2=j;  
    if(posy2<i)posy2=i;  
    };  
    };  
    };  
    //复制新图  
    Rectangle cloneRect=new Rectangle(posx1,posy1,posx2-posx1+1,posy2-posy1+1);  
    return singlepic.Clone(cloneRect,singlepic.PixelFormat);  
    }  
     
    /**////<summary> 
    ///平均分割图片  
    ///</summary> 
    ///<paramnameparamname="RowNum">水平上分割数</param> 
    ///<paramnameparamname="ColNum">垂直上分割数</param> 
    ///<returns>分割好的图片数组</returns> 
    public Bitmap []GetSplitPics(int RowNum,int ColNum)  
    {  
    if(RowNum==0||ColNum==0)  
    retur nnull;  
    int singW=bmpobj.Width/RowNum;  
    int singH=bmpobj.Height/ColNum;  
    Bitmap []PicArray=new Bitmap[RowNum*ColNum];  
     
    Rectangle cloneRect;  
    for(int i=0;i<ColNum;i++)//找有效区  
    {  
    for(int j=0;j<RowNum;j++)  
    {  
    cloneRect=newRectangle(j*singW,i*singH,singW,singH);  
    PicArray[i*RowNum+j]=bmpobj.Clone(cloneRect,bmpobj.PixelFormat);//复制小块图  
    }  
    }  
    return PicArray;  
    }  
     
    /**////<summary> 
    ///返回灰度图片的点阵描述字串,1表示灰点,0表示背景  
    ///</summary> 
    ///<paramnameparamname="singlepic">灰度图</param> 
    ///<paramnameparamname="dgGrayValue">背前景灰色界限</param> 
    ///<returns></returns> 
    public string GetSingleBmpCode(Bitmap singlepic,int dgGrayValue)  
    {  
    Color piexl;  
    string code="";  
    for(int posy=0;posy<singlepic.Height;posy++)  
    for(int posx=0;posx<singlepic.Width;posx++)  
    {  
    piexl=singlepic.GetPixel(posx,posy);  
    if(piexl.R<dgGrayValue)//Color.Black)  
     code=code+"1";  
    else  
     code=code+"0";  
    }  
    return code;  
    }  
    }  
      

  5.   


    见到有人做的,他是把百度验证码的图片下载下来显示的,不清楚怎么弄---------------
    下载下来了有什么用,不一样要识别图片?using System;  
    using System.Collections.Generic;  
    using System.Text;  
    using System.Collections;  
    using System.Drawing;  
    using System.Drawing.Imaging;  
    using System.Runtime.InteropServices;  
     
    namespace BallotAiying2  
    {  
    class UnCodebase  
    {  
    public Bitmap bmpobj;  
    public UnCodebase(Bitmap pic)  
    {  
    bmpobj=new Bitmap(pic);//转换为Format32bppRgb  
    }  
     
    /**////<summary> 
    ///根据RGB,计算灰度值  
    ///</summary> 
    ///<paramnameparamname="posClr">Color值</param> 
    ///<returns>灰度值,整型</returns> 
    private int GetGrayNumColor(System.Drawing.Color posClr)  
    {  
    return (posClr.R*19595+posClr.G*38469+posClr.B*7472)>>16;  
    }  
     
    /**////<summary> 
    ///灰度转换,逐点方式  
    ///</summary> 
    public void GrayByPixels()  
    {  
    for(int i=0;i<bmpobj.Height;i++)  
    {  
    for(int j=0;j<bmpobj.Width;j++)  
    {  
    int tmpValue=GetGrayNumColor(bmpobj.GetPixel(j,i));  
    bmpobj.SetPixel(j,i,Color.FromArgb(tmpValue,tmpValue,tmpValue));  
    }  
    }  
    }  
    /**////<summary> 
    ///去图形边框  
    ///</summary> 
    ///<paramnameparamname="borderWidth"></param> 
    public void ClearPicBorder(int borderWidth)  
    {  
    for(int i=0;i<bmpobj.Height;i++)  
    {  
    for(int j=0;j<bmpobj.Width;j++)  
    {  
    if(i<borderWidth||j<borderWidth||j>bmpobj.
    Width-1-borderWidth||i>bmpobj.Height-1-borderWidth)  
    bmpobj.SetPixel(j,i,Color.FromArgb(255,255,255));  
    }  
    }  
    }  
     
    /**////<summary> 
    ///灰度转换,逐行方式  
    ///</summary> 
    public void GrayByLine()  
    {  
    Rectangle rec=new Rectangle(0,0,bmpobj.Width,bmpobj.Height);  
    BitmapData bmpData=bmpobj.LockBits(rec,ImageLockMode.ReadWrite,bmpobj.PixelFormat);
    //PixelFormat.Format32bppPArgb);  
    //bmpData.PixelFormat=PixelFormat.Format24bppRgb;  
    IntPtr scan0=bmpData.Scan0;  
    int len=bmpobj.Width*bmpobj.Height;  
    int []pixels=ne wint[len];  
    Marshal.Copy(scan0,pixels,0,len);  
     
    //对图片进行处理  
    int GrayValue=0;  
    for(inti=0;i<len;i++)  
    {  
    GrayValue=GetGrayNumColor(Color.FromArgb(pixels[i]));  
    pixels[i]=(byte)(Color.FromArgb(GrayValue,GrayValue,GrayValue)).ToArgb();  
    }  
     
    bmpobj.UnlockBits(bmpData);  
    }  
     
    /**////<summary> 
    ///得到有效图形并调整为可平均分割的大小  
    ///</summary> 
    ///<paramnameparamname="dgGrayValue">灰度背景分界值</param> 
    ///<paramnameparamname="CharsCount">有效字符数</param> 
    ///<returns></returns> 
    public void GetPicValidByValue(int dgGrayValue,int CharsCount)  
    {  
    intpos x1=bmpobj.Width;intposy1=bmpobj.Height;  
    intpos x2=0;intposy2=0;  
    for(int i=0;i<bmpobj.Height;i++)//找有效区  
    {  
    for(int j=0;j<bmpobj.Width;j++)  
    {  
    int pixelValue=bmpobj.GetPixel(j,i).R;  
    if(pixelValue<dgGrayValue)//根据灰度值  
    {  
    if(posx1>j)posx1=j;  
    if(posy1>i)posy1=i;  
     
    if(posx2<j)posx2=j;  
    if(posy2<i)posy2=i;  
    };  
    };  
    };  
    //确保能整除  
    int Span=CharsCount-(posx2-posx1+1)%CharsCount;//可整除的差额数  
    if(Span<CharsCount)  
    {  
    int leftSpan=Span/2;//分配到左边的空列,如span为单数,则右边比左边大1  
    if(posx1>leftSpan)  
    posx1=posx1-leftSpan;  
    if(posx2+Span-leftSpan<bmpobj.Width)  
    posx2=posx2+Span-leftSpan;  
    }  
    //复制新图  
    Rectangle cloneRect=new Rectangle(posx1,posy1,posx2-posx1+1,posy2-posy1+1);  
    bmpobj=bmpobj.Clone(cloneRect,bmpobj.PixelFormat);  
    }  
     
    /**////<summary> 
    ///得到有效图形,图形为类变量  
    ///</summary> 
    ///<paramnameparamname="dgGrayValue">灰度背景分界值</param> 
    ///<paramnameparamname="CharsCount">有效字符数</param> 
    ///<returns></returns> 
    public void GetPicValidByValue(int dgGrayValue)  
    {  
    int posx1=bmpobj.Width;int posy1=bmpobj.Height;  
    int posx2=0;int posy2=0;  
    for(int i=0;i<bmpobj.Height;i++)//找有效区  
    {  
    for(int j=0;j<bmpobj.Width;j++)  
    {  
    int pixelValue=bmpobj.GetPixel(j,i).R;  
    if(pixelValue<dgGrayValue)//根据灰度值  
    {  
    if(posx1>j)posx1=j;  
    if(posy1>i)posy1=i;  
     
    if(posx2<j)posx2=j;  
    if(posy2<i)posy2=i;  
    };  
    };  
    };  
    //复制新图  
    Rectangle cloneRect=new Rectangle(posx1,posy1,posx2-posx1+1,posy2-posy1+1);  
    bmpobj=bmpobj.Clone(cloneRect,bmpobj.PixelFormat);  
    }  
     
    /**////<summary> 
    ///得到有效图形,图形由外面传入  
    ///</summary> 
    ///<paramnameparamname="dgGrayValue">灰度背景分界值</param> 
    ///<paramnameparamname="CharsCount">有效字符数</param> 
    ///<returns></returns> 
    public Bitmap GetPicValidByValue(Bitmap singlepic,int dgGrayValue)  
    {  
    int posx1=singlepic.Width;int posy1=singlepic.Height;  
    int posx2=0;int posy2=0;  
    for(int i=0;i<singlepic.Height;i++)//找有效区  
    {  
    for(int j=0;j<singlepic.Width;j++)  
    {  
    int pixelValue=singlepic.GetPixel(j,i).R;  
    if(pixelValue<dgGrayValue)//根据灰度值  
    {  
    if(posx1>j)posx1=j;  
    if(posy1>i)posy1=i;  
     
    if(posx2<j)posx2=j;  
    if(posy2<i)posy2=i;  
    };  
    };  
    };  
    //复制新图  
    Rectangle cloneRect=new Rectangle(posx1,posy1,posx2-posx1+1,posy2-posy1+1);  
    return singlepic.Clone(cloneRect,singlepic.PixelFormat);  
    }  
     
    /**////<summary> 
    ///平均分割图片  
    ///</summary> 
    ///<paramnameparamname="RowNum">水平上分割数</param> 
    ///<paramnameparamname="ColNum">垂直上分割数</param> 
    ///<returns>分割好的图片数组</returns> 
    public Bitmap []GetSplitPics(int RowNum,int ColNum)  
    {  
    if(RowNum==0||ColNum==0)  
    retur nnull;  
    int singW=bmpobj.Width/RowNum;  
    int singH=bmpobj.Height/ColNum;  
    Bitmap []PicArray=new Bitmap[RowNum*ColNum];  
     
    Rectangle cloneRect;  
    for(int i=0;i<ColNum;i++)//找有效区  
    {  
    for(int j=0;j<RowNum;j++)  
    {  
    cloneRect=newRectangle(j*singW,i*singH,singW,singH);  
    PicArray[i*RowNum+j]=bmpobj.Clone(cloneRect,bmpobj.PixelFormat);//复制小块图  
    }  
    }  
    return PicArray;  
    }  
     
    /**////<summary> 
    ///返回灰度图片的点阵描述字串,1表示灰点,0表示背景  
    ///</summary> 
    ///<paramnameparamname="singlepic">灰度图</param> 
    ///<paramnameparamname="dgGrayValue">背前景灰色界限</param> 
    ///<returns></returns> 
    public string GetSingleBmpCode(Bitmap singlepic,int dgGrayValue)  
    {  
    Color piexl;  
    string code="";  
    for(int posy=0;posy<singlepic.Height;posy++)  
    for(int posx=0;posx<singlepic.Width;posx++)  
    {  
    piexl=singlepic.GetPixel(posx,posy);  
    if(piexl.R<dgGrayValue)//Color.Black)  
     code=code+"1";  
    else  
     code=code+"0";  
    }  
    return code;  
    }  
    }  
    } 你好,我现在想知道的是如何上传头像,这个能帮帮忙么?
      

  6.   

    picture1.ImageUrl=图片地址即可。
      

  7.   

    http://www.cnblogs.com/chy710/archive/2010/02/22/1671007.html
    这个是例子,跟着做就行