1. #1
    Avatar von DMW007
    Registriert seit
    15.11.2011
    Beiträge
    8.137
    Thanked 9.417 Times in 3.253 Posts
    Blog Entries
    5

    Standard [C#] Google ReCaptcha Bild auslesen

    Guten Tag,

    die folgende Klasse ermöglicht es, ReCaptchas von Google in C# zu bearbeiten. Damit ist es möglich, HTTP-Requests zu senden, welche die Eingabe eines ReCaptchas erfordern (z.B. bei Registrierungsseiten wie auch Knuddels es verwendet).

    Funktionsweise

    Wird ein ReCaptcha ausgefüllt, sendet das Script an die Seite einen Key der recaptcha_challenge_field genannt wird. Mithilfe dieses Keys kann über Google geprüft werden, ob das Captcha korrekt eingegeben wurde oder nicht.
    Google hat sich gegen das automatische auslesen der Captchas geschützt, um das manschinelle auslesen zu erschweren.

    Ich nutze hierbei die NoScript-Option von ReCaptcha. Diese ist in der Regel bei jedem ReCaptcha vorhanden. Die normalen ReCaptchas arbeiten mit Javascript, daher stellt Google mit der NoScript-Option die Möglichkeit zur Verfügung, das Captcha ohne JS zu lösen.

    Klicke auf die Grafik für eine größere Ansicht 

Name:	recaptcha-nojs.jpg 
Hits:	328 
Größe:	38,1 KB 
ID:	3411

    Als Antwort erhält man dann das recaptcha_challenge_field.

    Benutzung

    Ihr müsst den Quelltext der Seite haben, auf der sich das zu ladende Captcha befindet. Dort findet ihr einen Link wie

    Code:
    http://api.recaptcha.net/noscript?k=6LcU3AgAAAAAADsejah-kBvVVTQa6UjSAocMAlz_
    Der Parameter k ist das benötigte NoScript Feld. Dieses müsst ihr beim initialisieren der Klasse als Parameter übergeben.

    Über die Funktion

    public string GetNoScriptField(string src);
    kann das Feld durch Übergabe des Quelltextes ausgelesen werden.

    Anschließend kann das Captcha-Bild als Image-Objekt über der Eigenschaft

    public Image CaptchaImage;
    abgerufen und Beispielsweise in einer PictureBox geladen werden.

    Das recaptcha_challenge_field erhält man über die Eigenschaft

    public string ChallengeField;
    Beispielaufruf:


    ReCaptchaViewer captchaViewer = new ReCaptchaViewer("6LcU3AgAAAAAADsejah-kBvVVTQa6UjSAocMAlz_");
    // Captcha in PictureBox laden
    pbCaptcha.Image = captchaViewer.CaptchaImage;
    // recaptcha_challenge_field in TextBox laden
    tbChallengeField.Text = captchaViewer.ChallengeField;


    Name:  recaptchaviewer.jpg
Hits: 387
Größe:  27,7 KB

    ReCaptchaViewer Klasse

    Spoiler:


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Net;
    using System.IO;
    using System.Text.RegularExpressions;
    using System.Web;
    using System.Drawing;

    class ReCaptchaViewer {
    CookieContainer cookies = new CookieContainer();
    Image captchaImage = null;
    string challengeField = string.Empty;

    public ReCaptchaViewer(string noScript) {
    GetCaptchaImage(noScript);
    }

    public Image CaptchaImage {
    get { return captchaImage; }
    }

    public string ChallengeField {
    get { return challengeField; }
    }

    private void GetCaptchaImage(string noScript) {
    HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.google.com/recaptcha/api/noscript?k=" + noScript);
    req.CookieContainer = cookies;
    string src = new StreamReader(req.GetResponse().GetResponseStream()).ReadToEnd();

    challengeField = new Regex("id=\"recaptcha_challenge_field\" value=\"([^\"]+)\">").Match(src).Groups[1].Value;

    string imageLocation = Regex.Match(src, "src=\"([^\"]+)\"").Groups[1].Value;
    req = (HttpWebRequest)HttpWebRequest.Create("http://www.google.com/recaptcha/api/" + imageLocation);
    captchaImage = Image.FromStream(req.GetResponse().GetResponseStream());
    }

    public string GetNoScriptField(string src) {
    return Regex.Match(src, "iframe src=\"http://api.recaptcha.net/noscript\\?k=([A-Za-z0-9-_]+)\"").Groups[1].Value;
    }
    }
    Angehängte Grafiken Angehängte Grafiken  


  2. The Following 4 Users Say Thank You to DMW007 For This Useful Post:

    DeKaDeNz (13.01.2012), Devon (12.01.2012), rVs14 (25.02.2012), uncopyable (12.01.2012)

Ähnliche Themen

  1. C# UserList neu auslesen ?
    Von AmJano im Forum .Net
    Antworten: 6
    Letzter Beitrag: 29.08.2012, 10:18
  2. VB.Net Stream auslesen
    Von Shane im Forum .Net
    Antworten: 7
    Letzter Beitrag: 30.06.2012, 16:22
  3. Googles Recaptcha beinahe geknackt!
    Von Waterpolo im Forum IT & Technik News
    Antworten: 4
    Letzter Beitrag: 01.06.2012, 15:16
  4. Poste das 1. Google Bild deines Vollen Namens
    Von !lkay im Forum OffTopic
    Antworten: 29
    Letzter Beitrag: 16.04.2012, 15:05
  5. [Vorschlag] "Google mal" oder Google Links Hilfen verbieten
    Von Comu im Forum Feedback
    Antworten: 1
    Letzter Beitrag: 18.12.2011, 19:34

Stichworte

Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.