Pergunta

Estou tendo dificuldade em consumir o serviço Web reCaptcha usando C # /. Net 3.5. Embora eu acho que o problema é com o consumo de serviços web em geral.

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

Ele continua me dizendo que o erro é: nVerifique-params-incorreta. O que significa:

Os parâmetros para / verificar estavam incorretas, certifique-se que você está passando todos os parâmetros necessários.

Mas é correta. Eu estou usando a chave privada, o endereço IP (localmente) é 127.0.0.1, eo desafio ea resposta parece bem. No entanto, o erro continua ocorrendo.

Eu tenho certeza que este é um problema com a forma como estou solicitando o serviço como este é a primeira vez que tenho webservices e .Net realmente utilizados.

Eu também tentei isso, pois garante que os dados são postados:

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

Parece parar no ponto onde eu recebo resposta.

Qualquer conselho?

Agradecemos antecipadamente

Foi útil?

Solução 2

Então, tenho esse trabalho, por alguma razão eu precisava para escrever o pedido para um fluxo assim:

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

Alguém poderia explicar por que isso funciona. Eu não acho que eu teria que fazer isso, não entendo completamente o que está acontecendo nos bastidores ..

Outras dicas

não trabalhei com o serviço recaptcha anteriormente, mas eu tenho duas recomendações para solucionar problemas:

  1. Use Fiddler ou Firebug e veja o que você está enviando saída. Verificando os parâmetros iria ajudá-lo na solução de problemas básicos, ou seja, caracteres inválidos, etc.
  2. Recaptcha Wiki tem uma entrada sobre como lidar com o desenvolvimento no Vista. Ele não tem que ser limitado a Vista, embora; Se você é sistema pode lidar com IPv6, em seguida, seu navegador pode ser comunicar nesse formato como um padrão. Parece que Recaptcha lida com IPv4. Ter trabalho Fiddler / Firebug iria informá-lo sobre os outros parâmetros que poderiam estar causando-lhe dor.

Isto pode não ajudar a resolver o seu problema, mas ele pode lhe proporcionar uma melhor informações solução de problemas.

A resposta de Damien está correta, é claro, mas apenas para ser claro sobre a ordem das coisas (eu estava um pouco confuso) e ter uma amostra de código completa ...

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

Há uma ligeira diferença no que estou escrevendo as variáveis ??pós para o pedido, mas o cerne da questão é a mesma.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top