Problemas consumindo WebService em .net (ReCaptcha)
-
05-07-2019 - |
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
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:
- 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.
- 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.