User authorization failed из за чего?

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Alv, 1 Mar 2010.

  1. Alv

    Alv Elder - Старейшина

    Joined:
    30 Jan 2007
    Messages:
    0
    Likes Received:
    20
    Reputations:
    2
    http://api.vkontakte.ru/api.php?api_id=652647&method=getGroups&sig=48af6f2fb49c3727745d800d964df178
    При переходе по ссылки все окей.
    Но при:
    Code:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Xml;
    using System.IO;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            public static string XmlGet(string link, string name)
            {
                XmlTextReader reader = new XmlTextReader(link);
                while (reader.Read())
                {
                    if (reader.NodeType == XmlNodeType.Element && name.Equals(reader.LocalName))
                    {
                        return reader.ReadElementContentAsString();
                    }
                }
                return string.Empty;
            }
            static void Main(string[] args)
            {
                string xml = @"http://api.vkontakte.ru/api.php?api_id=652647&method=getGroups&sig=48af6f2fb49c3727745d800d964df178";
                string b = XmlGet(xml, "error");
    Console.WriteLine(b);
    Console.ReadLine();
    
            }
        }
    }
    User authorization failed.
    Почему? Я все делаю правильно.

    Как сделать авторизацию на сервере?
     
    6 people like this.
  2. FEV

    FEV Member

    Joined:
    23 Sep 2009
    Messages:
    15
    Likes Received:
    7
    Reputations:
    0
    1. не тот раздел
    2. с чего ты взял, что "XmlTextReader reader = new XmlTextReader(link);" отправит гет запрос link на сервер?
     
  3. Alv

    Alv Elder - Старейшина

    Joined:
    30 Jan 2007
    Messages:
    0
    Likes Received:
    20
    Reputations:
    2
    С secure у меня все окей.
    Code:
    using System;
    using System.Text;
    using System.Security.Cryptography;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Xml;
    
    public partial class Balance : System.Web.UI.Page
    {
        public Random rnd = new Random();
        public string MD5(string instr)
        {
            string strHash = string.Empty;
    
            foreach (byte b in new MD5CryptoServiceProvider().ComputeHash(Encoding.Default.GetBytes(instr)))
            {
                strHash += b.ToString("X2").ToLower();
            }
            return strHash;
        }
        public string XmlGet(string link, string name)
        {
            XmlTextReader reader = new XmlTextReader(link);
            while (reader.Read())
            {
                if (reader.NodeType == XmlNodeType.Element && name.Equals(reader.LocalName))
                {
                    return ((UInt16)reader.ReadElementContentAsInt()).ToString();
                }
            }
            return string.Empty;
        }
        public int UnixTime()
        {
            TimeSpan ts;
            ts = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0));
            return (int)ts.TotalSeconds;
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            string apiid = Request.QueryString["api_id"];
            if (apiid == "652647")
            {
                string userid = Request.QueryString["user_id"];
                string viewerid = Request.QueryString["viewer_id"];
                string authkey = Request.QueryString["auth_key"];
                string paykey = "123456";
                string version = "2.0";
                string test = MD5(apiid + "_" + viewerid + "_" + paykey);
                if (test == authkey)
                {
                    int time = UnixTime();
                    int unique = rnd.Next(50000);
                    string sig = MD5("api_id=" + apiid + "method=secure.getBalancerandom=" + unique + "timestamp=" + time + "uid=" + viewerid + "v=" + version + paykey);
                    string xml = @"http://api.vkontakte.ru/api.php?api_id=" + apiid + "&method=secure.getBalance&random=" + unique + "&sig=" + sig + "&timestamp=" + time + "&uid=" + viewerid + "&v=" + version;
    
                        Response.Write("<?xml version='1.0' encoding='utf-8'?><root><balance>" + XmlGet(xml, "balance") + "</balance></root>");
                }
                else
                {
                    Response.Write("<?xml version='1.0' encoding='utf-8'?><root><balance>0</balance></root>");
                }
            }
            else
            {
                Response.Write(@"<font color=""red"">Ошибка доступа</font>");
            }
        }
    }
    Вот это работает без проблем.
     
  4. Alv

    Alv Elder - Старейшина

    Joined:
    30 Jan 2007
    Messages:
    0
    Likes Received:
    20
    Reputations:
    2
    Разабрался. Они не сделали авторизацию на сервере -(