求C#模拟网页自动注册源代码以研究(如果有图片验证最好。呵呵)。如果有的,发送邮件到[email protected]分,如果多人只能开新贴给分。

解决方案 »

  1.   

    Red_angelX(八戒) 说得对.
    各个网站也不一样 很难做到通用看HttpWebRequest
    POST数据用单独的网站做练习.先搞定一个再说
      

  2.   

    这个东西我做过 就是 HttpWebRequest 很简单 就是设置下head 用post到指定地址就可以啦
    不过cookie是个难点,取得图片和取得首页 到登陆完成 cookie要维持,还有不同的网站,登陆前后获取cookie和cookie个数都有所不同
      

  3.   

    呵呵。有代码的发奥。我也先去看看httpwebrequest了。哈哈
      

  4.   

    tring url = "http://my.b2b.hc360.com/my/turbine/template/firstview,other_login.html";string indata = @"LoginID=mytestcs&Passwd=aabbccdd&LoginChk=true&Submit=%B5%C7%A1%A1%A1%A1%C2%BC";            string outdata="";             CookieContainer myCookieContainer=new CookieContainer(); 
                //新建一个CookieContainer来存放Cookie集合 
                HttpWebRequest myHttpWebRequest=(HttpWebRequest)WebRequest.Create(url); 
                //新建一个HttpWebRequest 
                myHttpWebRequest.ContentType="application/x-www-form-urlencoded"; 
                myHttpWebRequest.ContentLength=indata.Length; 
                myHttpWebRequest.Method="POST"; 
                myHttpWebRequest.CookieContainer=myCookieContainer; 
                //设置HttpWebRequest的CookieContainer为刚才建立的那个myCookieContainer 
                Stream myRequestStream=myHttpWebRequest.GetRequestStream(); 
                StreamWriter myStreamWriter=new StreamWriter(myRequestStream,Encoding.GetEncoding("gb2312"));                 
                myStreamWriter.Write(indata); 
                //把数据写入HttpWebRequest的Request流 
                myStreamWriter.Close(); 
                myRequestStream.Close();             //关闭打开对象 
                HttpWebResponse myHttpWebResponse=(HttpWebResponse)myHttpWebRequest.GetResponse(); 
                //新建一个HttpWebResponse 
                myHttpWebResponse.Cookies=myCookieContainer.GetCookies(myHttpWebRequest.RequestUri); 
                //获取一个包含url的Cookie集合的CookieCollection 
                Stream myResponseStream=myHttpWebResponse.GetResponseStream(); 
                StreamReader myStreamReader=new StreamReader(myResponseStream,Encoding.GetEncoding("gb2312")); 
                outdata=myStreamReader.ReadToEnd(); 
                //把数据从HttpWebResponse的Response流中读出 
                myStreamReader.Close(); 
                myResponseStream.Close(); 
                Console.WriteLine(outdata); 
                //显示"登录" 
     
                //拿到了Cookie,再进行请求就能直接读取到登录后的内容了 
                myHttpWebRequest=(HttpWebRequest)WebRequest.Create(url); 
                myHttpWebRequest.CookieContainer=myCookieContainer;//* 
                //刚才那个CookieContainer已经存有了Cookie,把它附加到HttpWebRequest中则能直接通过验证 
                myHttpWebResponse=(HttpWebResponse)myHttpWebRequest.GetResponse(); 
                myHttpWebResponse.Cookies=myCookieContainer.GetCookies(myHttpWebRequest.RequestUri);             
                myResponseStream=myHttpWebResponse.GetResponseStream(); 
                myStreamReader=new StreamReader(myResponseStream,Encoding.GetEncoding("gb2312")); 
                outdata=myStreamReader.ReadToEnd(); 
                myStreamReader.Close(); 
                myResponseStream.Close(); 
                Console.WriteLine(outdata);
      

  5.   

    如何给网页Post数据
    ///////////////////////////////////////////////////////////////////////////   
      //SDK   post   
      ///////////////////////////////////////////////////////////////////////////   
      #include   "stdafx.h"   
      #include   "winsock.h"   
      #pragma   comment(lib,"ws2_32.lib")   
      #define   winsock_version   0x0101   
      void   main()   
      {   
      //I   create     C:\Inetpub\wwwroot\test\test.asp   ,start   the   web   service   
      //start   my   program,   the   result   is   OK.   
      //If   it   works,it   is   written   by   masterz,otherwise   I   don't   know   who   write   it.   
              SOCKADDR_IN   saServer;   
      LPHOSTENT   lphostent;   
      WSADATA   wsadata;   
              SOCKET   hsocket;   
      int   nRet;   
      const   char*   host_name="127.0.0.1";   
      char*   req="POST   /test/test.asp   HTTP/1.0\r\n"   
      "From:   local\r\n"   
      "User-Agent:   post_test/1.0\r\n"   
      "Content-Type:   application/x-www-form-urlencoded\r\n"   
      "Content-Length:   20\r\n\r\n"   
      "type=12345&name=aaaa";   
      if(WSAStartup(winsock_version,&wsadata))   
      printf("can't   initial   socket");   
              lphostent=gethostbyname(host_name);   
              if(lphostent==NULL)   
      printf("lphostent   is   null");   
      hsocket   =   socket(AF_INET,   SOCK_STREAM,   IPPROTO_TCP);   
              saServer.sin_family   =   AF_INET;   
      //   Use   def.   now,   need   to   handle   general   case   
      saServer.sin_port   =   htons(80);   
      saServer.sin_addr   =   *((LPIN_ADDR)*lphostent->h_addr_list);   
              nRet   =   connect(hsocket,   (LPSOCKADDR)&saServer,   sizeof(SOCKADDR_IN));   
      if   (nRet   ==   SOCKET_ERROR)   
      {   
      printf("can't   connect");   
      closesocket(hsocket);   
      return;   
      }   
      else   
      printf("connected   with   %s\n",host_name);   
      nRet   =   send(hsocket,   req,   strlen(req),   0);   
      if   (nRet   ==   SOCKET_ERROR)   
      {   
      printf("send()   failed");   
      closesocket(hsocket);   
        
      }   
      else   
      printf("send()   OK\n");   
      char   dest[1000];   
      nRet=1;   
      while(nRet>0)   
      {   
      nRet=recv(hsocket,(LPSTR)dest,sizeof(dest),0);   
      if(nRet>0)   
      dest[nRet]=0;   
      else   
      dest[0]=0;   
      printf("\nReceived   bytes:%d\n",nRet);   
      printf("Result:\n%s",dest);   
      }   
      }
    void   post()   
      {   
              CInternetSession   session("My   Session");   
              CHttpConnection*   pServer   =   NULL;   
              CHttpFile*   pFile   =   NULL;   
              CString   ServerName   =   "webmail.21cn.com";   
              INTERNET_PORT   nPort   =   80;   
              DWORD   retcode;   
              char   outBuff[300]   =   "LoginName=aaa&passwd=xxx&DomainName=21cn.com";//I   have   test   this   with   my   loginname   and   password   
              try   
              {   
                      pServer   =   session.GetHttpConnection(ServerName,nPort);   
                      pFile   =   pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST,"/NULL/NULL/NULL/NULL/NULL/SignIn.gen",NULL,1,NULL,NULL,INTERNET_FLAG_EXISTING_CONNECT);   
                      pFile   ->   AddRequestHeaders("Content-Type:   application/x-www-form-urlencoded");   
                      pFile   ->   AddRequestHeaders("Accept:   */*");   
                      pFile   ->   SendRequest(NULL,0,outBuff,strlen(outBuff)+1);   
                      pFile   ->   QueryInfoStatusCode(retcode);   
                      //   you   can   read   from   the   file   after   this......I've   just   left   it   out.   
                      for(int   i=0;i<10;i++)//read   ten   line   of   returned   HTML,you   need   to   edit   this   to   use   the   result   
                      {   
                      CString   smsg;   
                      pFile->ReadString(smsg);   
                      AfxMessageBox(smsg);   
                      }   
      DWORD   dwlen=pFile->GetLength();   
      char   buf[1024];   
      DWORD   dwread=pFile->Read(buf,1024);   
              }   
              catch   (CInternetException   *   e){};   
              delete   pFile;   
              delete   pServer;   
              session.Close();   
      }
      

  6.   


     
    这个是提交的数据类:
     using System.Collections;
     using System.IO;
     
     public class RequestData
      {
     ArrayList arr=new ArrayList();
     public RequestData()
      {
     
     }
     
     public string GetData()
      {
     string r="";
     
     for(int i=0;i<arr.Count;i++)
      {
     data d=(data)arr[i];
     if(r.Length>0)r+="&";
     r+=d.Field+"="+d.Value;
     }
     return r;
     }
     
     public void AddField(string Field,string Value)
      {
     data a=new data();
     a.Field=Field;
     a.Value=Value;
     
     arr.Add(a);
     }
     
     struct data
      {
     public string Field,Value;
     }
     
     
     }可以参考
      

  7.   

    呵呵,都不用c#,直接用javascript就可以了
    自己做一个form把要填的内容在form里初始化好,把action设置成目标地址,不停的submit就可以了
      

  8.   

    private string GetUrlContext(string curl)
    {
        string text = "";
        if (this.method == 1) //Get
        {
            HttpWebRequest request = (HttpWebRequest) WebRequest.Create(new Uri(curl));
            ServicePointManager.Expect100Continue = false;
            HttpWebResponse response = null;
            if (Form1.C_IsProxyOn)
            {
                WebProxy proxy = new WebProxy();
                proxy = (WebProxy) request.Proxy;
                string uriString = Form1.C_Proxy_addr + ":" + Form1.C_Proxy_port;
                if (uriString.Length > 0)
                {
                    Uri uri = new Uri(uriString);
                    proxy.Address = uri;
                    proxy.Credentials = new NetworkCredential(Form1.C_Proxy_user, Form1.C_Proxy_pass);
                    request.Proxy = proxy;
                }
            }
            try
            {
                response = (HttpWebResponse) request.GetResponse();
            }
            catch (WebException exception)
            {
                if (exception.Status == WebExceptionStatus.ProtocolError)
                {
                    response = (HttpWebResponse) exception.Response;
                }
                else if (exception.Status == WebExceptionStatus.ConnectFailure)
                {
                    MessageBox.Show("\u8fde\u63a5\u670d\u52a1\u5668\u5931\u8d25,\u8bf7\u68c0\u67e5\u7f51\u7edc", "\u9519\u8bef");
                }
                else
                {
                    MessageBox.Show(exception.ToString());
                }
            }
            Stream responseStream = response.GetResponseStream();
            StreamReader reader = new StreamReader(responseStream, Encoding.Default);
            text = reader.ReadToEnd();
            responseStream.Close();
            response.Close();
            reader.Close();
            return text;
        }
    //Post
        string[] textArray = new string[2];
        textArray = curl.Split(new char[] { '?' });
        HttpWebRequest request2 = (HttpWebRequest) WebRequest.Create(new Uri(textArray[0]));
        ServicePointManager.Expect100Continue = false;
        request2.Method = "POST";
        CookieContainer container = new CookieContainer();
        request2.CookieContainer = container;
        string s = textArray[1];
        byte[] bytes = new ASCIIEncoding().GetBytes(s);
        request2.ContentType = "application/x-www-form-urlencoded";
        request2.ContentLength = s.Length;
        Stream requestStream = request2.GetRequestStream();
        requestStream.Write(bytes, 0, bytes.Length);
        requestStream.Close();
        if (Form1.C_IsProxyOn)
        {
            WebProxy proxy = new WebProxy();
            proxy = (WebProxy) request2.Proxy;
            string uriString = Form1.C_Proxy_addr + ":" + Form1.C_Proxy_port;
            if (uriString.Length > 0)
            {
                Uri uri2 = new Uri(uriString);
                proxy.Address = uri2;
                proxy.Credentials = new NetworkCredential(Form1.C_Proxy_user, Form1.C_Proxy_pass);
                request2.Proxy = proxy;
            }
        }
        HttpWebResponse response = null;
        try
        {
            response = (HttpWebResponse) request2.GetResponse();
        }
        catch (WebException exception2)
        {
            if (exception2.Status == WebExceptionStatus.ProtocolError)
            {
                response = (HttpWebResponse) exception2.Response;
            }
            else if (exception2.Status == WebExceptionStatus.ConnectFailure)
            {
                MessageBox.Show("\u8fde\u63a5\u670d\u52a1\u5668\u5931\u8d25,\u8bf7\u68c0\u67e5\u7f51\u7edc", "\u9519\u8bef");
            }
            else
            {
                MessageBox.Show(exception2.ToString());
            }
        }
        response.Cookies = request2.CookieContainer.GetCookies(request2.RequestUri);
        Stream stream = response.GetResponseStream();
        StreamReader reader2 = new StreamReader(stream, Encoding.Default);
        text = reader2.ReadToEnd();
        stream.Close();
        response.Close();
        reader2.Close();
        return text;
    }