Frage

Ich habe Schwierigkeiten, den reCaptcha Web Service unter Verwendung von C # in raubend /. Net 3.5. Obwohl ich das Problem denken, ist mit Web-Services im Allgemeinen raubend.

String validate = String.Format("http://api-verify.recaptcha.net/verify?privatekey={0}&remoteip={1}&challenge={2}&response={3}", PrivateKey, UserIP, Challenge, Response);
WebClient serviceRequest = new WebClient();
serviceRequest.Headers.Add("ContentType","application/x-www-form-urlencoded")

String response = serviceRequest.DownloadString(new Uri(validate ));

Es hält mich zu sagen, dass der Fehler: nverify-params-falsch. Das heißt:

  

Die Parameter / verify falsch waren, stellen Sie sicher, dass Sie alle erforderlichen Parameter übergeben.

Aber es ist richtig. Ich bin mit dem privaten Schlüssel, die IP-Adresse (lokal) ist 127.0.0.1, und die Herausforderung und Antwort scheinen in Ordnung. Allerdings hält der Fehler auftritt.

Ich bin mir ziemlich sicher, dass dies ein Problem mit, wie ich den Dienst am anfordernden da dies das erste Mal, dass ich einen Web Service und .Net tatsächlich verwendet wird.

Ich habe auch versucht, das, wie es die Daten gewährleistet werden geschrieben:

    String queryString = String.Format("privatekey={0}&remoteip={1}&challenge={2}&response={3}",PrivateKey, UserIP, Challenge, Response);
    String Validate = "http://api-verify.recaptcha.net/verify" + queryString;

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(Validate));
    request.Method = "POST";
    request.ContentType = "application/x-www-form-urlencoded";
    request.ContentLength = Validate.Length;


    **HttpWebResponse captchaResponse = (HttpWebResponse)request.GetResponse();**
    String response;
    using (StreamReader reader = new StreamReader(captchaResponse.GetResponseStream()))
        response = reader.ReadToEnd();

Es scheint an der Stelle zum Stillstand kommen, wo ich Antwort.

Jede Beratung?

Vielen Dank im Voraus

War es hilfreich?

Lösung 2

bekam also diese Arbeit, ich aus irgendeinem Grund notwendig, um die Anforderung an einen Stream zu schreiben wie folgt:

//Write data to request stream 
        using (Stream requestSteam = request.GetRequestStream())
            requestSteam.Write(byteData, 0, byteData.Length);

Kann mir jemand erklären, warum das funktioniert. Ich hätte nicht gedacht, ich müsste, dies zu tun, nicht vollständig verstehen, was hinter den Kulissen passiert ..

Andere Tipps

Haben Sie nicht mit dem recaptcha Service vorher gearbeitet, aber ich habe zwei Problem Empfehlungen:

  1. Verwenden Sie Fiddler oder Firebug und sehen, was Sie outbound sind zu senden. Ihre Parameter Überprüfen würden Sie grundlegende Maßnahmen zur Fehlerbehebung, das heißt ungültige Zeichen, usw. helfen.
  2. Die Recaptcha Wiki hat einen Eintrag um mit der Entwicklung auf Vista zu tun. Es muss nicht auf Vista beschränkt werden, obwohl; wenn Sie System sind, kann IPv6 umgehen, dann könnte Ihr Browser in diesem Format als Standard-Kommunikation sein. Es scheint, als ob Recaptcha mit IPv4 beschäftigt. Fiddler / Firebug Arbeits Mit würden Sie über die anderen Parameter sagen, dass Sie Kummer verursachen könnte.

Dies kann nicht helfen, Ihr Problem zu lösen, aber es könne Ihnen eine bessere Fehlersuche Informationen zur Verfügung stellen.

Damien Antwort richtig ist natürlich, sondern nur um die Ordnung der Dinge klar zu sein (ich war ein wenig verwirrt) und ein vollständiges Codebeispiel zu haben ...

var uri = new Uri("http://api-verify.recaptcha.net/verify"); 

var queryString = string.Format(
    "privatekey={0}&remoteip={1}&challenge={2}&response={3}", 
    privateKey, 
    userIP, 
    challenge, 
    response);

var request = (HttpWebRequest)HttpWebRequest.Create(uri);

request.Method = WebRequestMethods.Http.Post;
request.ContentLength = queryString.Length;
request.ContentType = "application/x-www-form-urlencoded";

using (var writer = new StreamWriter(request.GetRequestStream()))
{
    writer.Write(queryString);
}

string result;
using (var webResponse = (HttpWebResponse)request.GetResponse())
{
    var reader = new StreamReader(webResponse.GetResponseStream()); 
    result = reader.ReadToEnd();
}

Es gibt einen kleinen Unterschied, dass ich die POST-Variablen auf die Anfrage hier schreibe, aber der Kern ist es das gleiche.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top