zoukankan      html  css  js  c++  java
  • ASP.NET实现RENREN SIG计算

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Net;
    using System.IO;
    using System.Security.Cryptography;
    
    namespace ConsoleApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                Dictionary<string, string> parameters = new Dictionary<string, string>();
    
                parameters.Add("access_token", "e.g accesstoken");
    
                parameters.Add("method", "xiaonei.blog.addBlog");
    
                parameters.Add("format", "json");
    
                parameters.Add("title", "abcdadf");
    
                parameters.Add("content", "contentsdfsd");
    
                parameters.Add("v", "1.0");
    
                string sig = GenerateSignature(parameters);
    
                parameters.Add("sig", sig);
    
                string post_string = GeneratePostParameter(parameters);
    
                Console.WriteLine("POST参数值:\n" + post_string + "\n");
    
                post_string = HttpWorker.HttpPost("http://api.renren.com/restserver.do", post_string);
    
                Console.WriteLine("POST返回结果:\n" + post_string);
    
                Console.ReadLine();
            }
    
            static string GenerateSignature(Dictionary<string, string> parameters)
            {
                IDictionary<string, string> sorted_paramters = new SortedDictionary<string, string>(parameters);
    
                IEnumerator<KeyValuePair<string, string>> dem = sorted_paramters.GetEnumerator();
    
                StringBuilder sbQuery = new StringBuilder();
    
                while (dem.MoveNext())
                {
                    string name = dem.Current.Key;
    
                    string value = dem.Current.Value;
    
                    if (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(value))
                    {
                        sbQuery.Append(name);
    
                        sbQuery.Append("=");
    
                        sbQuery.Append(value);
    
                    }
                }
                sbQuery.Append("your secret key");
    
                Console.WriteLine("拼接参数值:\n" + sbQuery.ToString() + "\n");
    
                return HashConfigString(sbQuery.ToString());
            }
    
            static string GeneratePostParameter(Dictionary<string ,string> parameters)
            {
                bool hasParameter = false;
    
                StringBuilder sbPostString = new StringBuilder();
    
                IDictionary<string, string> sorted_paramters = new SortedDictionary<string, string>(parameters);
    
                IEnumerator<KeyValuePair<string, string>> dem = parameters.GetEnumerator();
    
                while (dem.MoveNext())
                {
                    string name = dem.Current.Key;
    
                    string value = dem.Current.Value;
    
                    if (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(value))
                    {
                        if (hasParameter)
                        {
                            sbPostString.Append("&");
                        }
    
                        sbPostString.Append(name);
    
                        sbPostString.Append("=");
    
                        sbPostString.Append(value);
    
                        hasParameter = true;
                    }
                }
    
                return sbPostString.ToString();
            }
    
            static string HashConfigString(string plain_text)
            {
                MD5 md5Hash = MD5.Create();
    
                byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(plain_text));
    
                StringBuilder sbContent = new StringBuilder();
    
                foreach (byte element in data)
                {
                    sbContent.Append(element.ToString("x2"));
                }
    
                Console.WriteLine("sig:\n" + sbContent.ToString() + "\n");
    
                return sbContent.ToString();
            }
    
        }
    
        public class HttpWorker
        {
            public static string HttpGet(string url)
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    
                StreamReader reader = new StreamReader(request.GetResponse().GetResponseStream());
    
                string http_result = reader.ReadToEnd(); if (reader != null) reader.Close();
    
                return http_result;
            }
    
            public static string HttpPost(string url, string data)
            {
                //System.Net.ServicePointManager.Expect100Continue = false;
    
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    
                request.Method = "POST";
    
                request.KeepAlive = false;
    
                // request.ServicePoint.Expect100Continue = false;
    
                request.ContentType = "application/x-www-form-urlencoded;";
    
                byte[] post = Encoding.UTF8.GetBytes(data);
    
                using (Stream stream = request.GetRequestStream())
                {
                    stream.Write(post, 0, post.Length);
    
                    stream.Close();
    
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    
                    string http_result = string.Empty;
    
                    StreamReader reader = new StreamReader(response.GetResponseStream());
    
                    http_result = reader.ReadToEnd();
    
                    if (reader != null) reader.Close();
    
                    if (response != null) response.Close();
    
                    return http_result;
                }
            }
        }
    }
    
  • 相关阅读:
    bzoj4821
    bzoj2434
    第二阶段团队项目冲刺站立会议(五)
    第二阶段团队项目冲刺站立会议(四)
    第二阶段团队项目冲刺站立会议(三)
    小水王
    第二阶段团队项目冲刺站立会议(二)
    梦断代码阅读笔记02
    第二阶段团队项目冲刺站立会议(一)
    梦断代码阅读笔记01
  • 原文地址:https://www.cnblogs.com/ytjjyy/p/2680420.html
Copyright © 2011-2022 走看看