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; } } } } |
分类:
c#
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!