2009-09-11 8 views
0

J'ai des difficultés à consommer le service Web reCaptcha en utilisant C# /. Net 3.5. Bien que je pense que le problème est de consommer des services Web en général. Je ne cesse de me dire que l'erreur est: nverify-params-incorrect. Ce qui signifie:Problèmes de consommation de WebService dans .Net (ReCaptcha)

Les paramètres à/vérifier étaient incorrects, assurez-vous que vous passez tous les paramètres requis.

Mais c'est correct. J'utilise la clé privée, l'adresse IP (localement) est 127.0.0.1, et le défi et la réponse semblent bien. Cependant, l'erreur persiste. Je suis assez sûr que c'est un problème avec la façon dont je demande le service car c'est la première fois que j'ai utilisé les services web et .Net.

J'ai essayé aussi qu'il en assure les données est affiché:

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(); 

Semble décrochage au point où je reçois la réponse.

Un conseil?

Merci à l'avance

+1

Je commencerais par utiliser la fonctionnalité de référence Web intégrée de Visual Studio. Plus précisément, vous cliquez avec le bouton droit sur votre fichier de projet, Ajouter une référence Web et pointez sur le fichier WSDL.Le système crée automatiquement un proxy pour vous, vous permettant d'utiliser le service comme n'importe quel autre objet, ne nécessitant pas de manipuler manuellement les appels HTTP. –

+0

Joshua, je ne suis pas sûr que ce soit aussi simple. Lorsque j'essaie d'ajouter une référence à l'aide des URL de service Web décrites ici (http://code.google.com/apis/recaptcha/docs/verify.html), cela ne semble pas me convenir en utilisant un site Web Référence de référence ou référence de service WCF. –

Répondre

0

donc obtenu ce travail, pour une raison que je devais écrire la demande à un flux comme si:

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

Quelqu'un pourrait-il expliquer pourquoi cela fonctionne. Je ne pensais pas que je devrais le faire, ne comprends pas complètement ce qui se passe dans les coulisses ..

+0

Une possibilité est que votre code d'origine, c'est-à-dire "new Uri (validate)", tronque la longueur de la requête. (Ce qui pourrait expliquer le résultat de nverify-params-incorrect.) L'utilisation de Fiddler indiquerait si cela se produisait. Néanmoins, avec cette méthode, toutes les données sont poussées dans le RequestStream, qui peut gérer n'importe quel découpage pour les gros blocs de données si nécessaire. Sans informations de débogage sur le code d'origine, c'est difficile à dire. – jro

0

ont pas travaillé avec le service recaptcha précédemment, mais j'ai deux recommandations de dépannage:

  1. Fiddler ou Firebug et regarder ce que vous envoyez sortant. La vérification de vos paramètres vous aidera avec le dépannage de base, c'est-à-dire les caractères non valides, etc.
  2. Le Recaptcha Wiki has an entry traitant du développement sous Vista. Il ne doit pas être limité à Vista, cependant; Si votre système peut gérer IPv6, votre navigateur pourrait communiquer par défaut dans ce format. Il semble que Recaptcha gère IPv4. Avoir Fiddler/Firebug vous parlerait de ces autres paramètres qui pourraient vous causer du chagrin.

Ceci peut ne pas aider à résoudre votre problème mais il pourrait vous fournir de meilleures informations de dépannage.

0

La réponse de Damien est correcte bien sûr, mais juste pour être clair sur l'ordre des choses (j'étais un peu confus) et d'avoir un échantillon de code complet ...

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

il y a une légère différence que j'écris les variables de poste à la demande, mais le cœur de celui-ci est le même.