Проблемы использования WebService в .Net (ReCaptcha) - PullRequest
0 голосов
/ 11 сентября 2009

У меня проблемы с использованием веб-службы reCaptcha с использованием C # /. Net 3.5. Хотя я думаю, что проблема с потреблением веб-сервисов в целом.

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

Мне постоянно говорят, что ошибка: nverify-params-invalid. Что означает:

Параметры для / проверки были неверны, убедитесь, что вы передаете все необходимые параметры.

Но это правильно. Я использую закрытый ключ, IP-адрес (локально) 127.0.0.1, и вызов и ответ кажутся в порядке. Однако ошибка продолжает происходить.

Я почти уверен, что это проблема, связанная с тем, как я запрашиваю службу, поскольку я впервые использую веб-сервисы и .Net.

Я также попробовал это, так как это обеспечивает отправку данных:

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

Кажется, я застрял в том месте, где я получил ответ.

Любой совет?

Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 14 сентября 2009

Так получилось, что по какой-то причине мне нужно было записать запрос в поток следующим образом:

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

Может кто-нибудь объяснить, почему это работает. Я не думал, что мне нужно будет это сделать, не совсем понимаю, что происходит за кадром ..

0 голосов
/ 13 февраля 2012

Ответ Дэмиена, конечно, правильный, но просто для ясности порядка вещей (я был немного смущен) и иметь полный пример кода ...

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

Есть небольшая разница в том, что я пишу переменные записи в запрос, но суть его та же.

0 голосов
/ 14 сентября 2009

Ранее не работал со службой recaptcha, но у меня есть две рекомендации по устранению неполадок:

  1. Используйте Fiddler или Firebug и наблюдайте за тем, что вы отправляете. Проверка ваших параметров поможет вам устранить основные неполадки, например, недопустимые символы и т. Д.
  2. В Recaptcha Wiki есть запись о разработке на Vista. Это не должно быть ограничено Vista, хотя; если ваша система может обрабатывать IPv6, то ваш браузер может использовать этот формат по умолчанию. Похоже, что Recaptcha имеет дело с IPv4. Работа Fiddler / Firebug расскажет вам о других параметрах, которые могут вызвать у вас горе.

Это может не помочь решить вашу проблему, но может предоставить вам более подробную информацию об устранении неполадок.

...