2012-02-29 7 views
0

Je crée une application pour une entreprise qui va remplir un formulaire dans l'application Windows et une demande de publication sera envoyée au serveur pour enregistrer l'utilisateur.curl ne montre pas captcha

Pour envoyer une requête POST i utilisé boucle

private void post_data(string url, string data) 
    { 
     Curl.GlobalInit((int)CURLinitFlag.CURL_GLOBAL_ALL); 

     Easy e = new Easy(); 
     Easy.WriteFunction wf = MyWriteFunction; 

     e.SetOpt(CURLoption.CURLOPT_URL, url); 
     e.SetOpt(CURLoption.CURLOPT_POSTFIELDS, data); 
     e.SetOpt(CURLoption.CURLOPT_WRITEFUNCTION, wf); 
     e.Perform(); 
     e.Cleanup(); 
    } 

    private int MyWriteFunction(byte[] buf, int size, int nmemb, Object extraData) 
    { 
     StreamWriter sw = new StreamWriter(@"curl.txt"); 

     foreach (byte b in buf) 
     { 
      sw.Write(((char)b)); 
     } 
     sw.Flush(); 
     sw.Close(); 

     return buf.Length; 
    } 

Et pour extraire le chemin de l'image Captcha à partir du code source et de laisser l'utilisateur tapez le texte

private void Get_Captcha_Image(string url) 
    { 
     Curl.GlobalInit((int)CURLinitFlag.CURL_GLOBAL_ALL); 

     Easy e = new Easy(); 
     Easy.WriteFunction wf = MyWriteFunction; 
     e.SetOpt(CURLoption.CURLOPT_URL, url); 
     e.SetOpt(CURLoption.CURLOPT_WRITEFUNCTION, wf); 
     e.Perform(); 
     e.Cleanup(); 

     get_ca_2(); 
    } 

    private void get_ca_2() 
    { 
     Regex r = new Regex(@"(?<=src=('|""))https?://.*?(?=\1)"); 

     foreach (string line in File.ReadAllLines("curl.txt")) 
     { 
      Match m = r.Match(line); 

      if (m.Success) 
      { 
       if (m.Value.Contains("http://www.google.com/recaptcha/api/image?c=")) 
       { 
        pictureBox1.ImageLocation = m.Value; 
       } 
      } 
     } 
    } 

Mais ce que je remarqué est que

<img width="300" height="57" src="http://www.google.com/recaptcha/api/image?c=03AHJ_VuvnenuZSRbfL_JTQLTYKFYzEFTkYrDgedu0SLyYvTDhsr2hHjQPwYlGJiP3dJRewkIhhdeILAd1_61_aFfU2dclbf8uovme-0gF3nm8Y7-LQVfaDQoI35bo3c35pOnF-xSY3Qfy_lh8TzhSWlMemEnkYnDpZw" alt="reCAPTCHA challenge image" style="display:block;"> 

Par exemple n'est pas présent sur le code source extrait de la page Web g boucle

je me suis lassé d'un navigateur Web et de le cacher et j'ai pu trouver l'image captcha et je réussissais sur des données affichant, mais je dois comprendre sur boucle

Répondre

1

je vérifier si les changements de contenu de site Web en fonction de vos en-têtes. Évidemment, les en-têtes de curl vont avoir l'air très différents de ceux de, disons, IE. Essayez d'utiliser un navigateur qui vous permet de simuler différents user-agent et ainsi de suite, voir si cela le change. Cela peut être aussi simple que d'utiliser le drapeau --user-agent de curl.