скручиваемость не показывает капчу - PullRequest
0 голосов
/ 01 марта 2012

Я создаю приложение для компании, которое будет заполнять форму в приложении Windows, и на сервер будет отправлен почтовый запрос для регистрации пользователя.

Чтобы отправить запрос POST, я использовал curl

    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;
    }

И для того, чтобы извлечь путь изображения Captcha из исходного кода и позволить пользователю напечатать текст

    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;
                }
            }
        }
    }

Но я заметил, что

<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;">

Например, отсутствует на исходном коде извлеченной веб-страницы с помощью curl

Я устал от веб-браузера и скрыл его, и мне удалось найти изображение с изображением капчи, и я успешно разместил данные, но мне нужно выяснитьэто на завитке

1 Ответ

1 голос
/ 01 марта 2012

Я бы выяснил, изменяется ли содержание сайта в зависимости от ваших заголовков. Очевидно, что заголовки из curl будут сильно отличаться от, скажем, IE. Попробуйте использовать браузер, который позволяет вам подделать другой пользовательский агент и т. Д., Посмотрите, изменит ли это его. Это может быть так же просто, как использовать флаг curl --user-agent.

...