DynDNS и неопровержимый ответ бадахта - PullRequest
1 голос
/ 08 декабря 2011

Я пытаюсь использовать DynDNS API для проверки предоставленных пользователем учетных данных DynDNS, а в документации говорится, что ответ "badauth" предназначен именно для этого.
Идея заключается в том, что я могу автоматизировать обновление с учетными данными пользователя, искать ответ badauth и использовать его для обнаружения неверных учетных данных, что звучит идеально.
Проблема в том, что единственный ответ, который я когда-либо получаю, это бадаут. Когда я посылаю учетные данные, которые должны быть хорошими (так как они в настоящее время работают для входа в систему и все), я получаю ответ badauth. Вот мой код:

   try
   {
     string target = string.Format( "http://{0}:{1}@members.dyndns.org:8245/nic/update?hostname={2}&myip={3}",
      HttpUtility.UrlEncode( DynDnsUserName ), HttpUtility.UrlEncode( DynDnsPassword ), HttpUtility.UrlEncode( DynDnsURL ), ip );
     HttpWebRequest request = WebRequest.Create( target ) as HttpWebRequest;
     request.Method = "GET";
     request.UserAgent = company + " - " + model + " - " + firmware;
     HttpWebResponse response = request.GetResponse() as HttpWebResponse;
     Stream reply = response.GetResponseStream();
     StreamReader readReply = new StreamReader( reply );
     string returnCode = readReply.ReadToEnd();
     Trace.WriteLine( "We've validated the provided DynDNS credentials, response received: " + returnCode );
     return !returnCode.Contains( "badauth" );
   }
   catch (WebException webEx)
   {
     Trace.WriteLine( "WebException thrown: " + webEx.Message );
     if (webEx.Response != null)
     {
      Stream reply = webEx.Response.GetResponseStream();
      StreamReader readReply = new StreamReader( reply );
      Trace.WriteLine( "Actual response: " + readReply.ReadToEnd() );
     }
   }

Независимо от того, какие учетные данные я использую, я получаю выброшенное WebException «Удаленный сервер возвратил ошибку: (401) Несанкционированный» с телом ответа badauth. Есть идеи?

1 Ответ

2 голосов
/ 09 декабря 2011

{0}: {1} @ ... не будет работать с веб-запросом.

Ваша цель просто "http://members.dynd. ...", и вы делаете что-то вроде

NetworkCredential myCredentials = new NetworkCredential(username,passwd);

request.Credentials = myCredentials;
...