小米OAuth2.0 C#版SDK源代码学习
来源:互联网 发布:禾赛科技李一帆 知乎 编辑:程序博客网 时间:2024/06/01 21:47
因为,最近在做和小米账号胡同的项目,所以分析学习了关于小米C#版SDK的开放源代码,在这里进行总结和汇总,毕竟编程的学习就是不断的学习别人的代码,取长补短,扩展思路。
获取网页内容的方法
获取html网页内容,该方法是为了获取返回网页内容,以获取必要的接口信息。
/// <summary>/// 获取html网页内容/// </summary>/// <param name="uri">网址代码</param>/// <param name="method">请求的方法</param>/// <param name="headers">HTTP标头键值对集合</param>/// <returns></returns>public static string getResponse(string uri, string method, Dictionary<string,string> headers){ HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); request.Method = method; if (headers != null) { foreach (KeyValuePair<string, string> headersKey in headers) { request.Headers.Add(headersKey.Key, headersKey.Value); } } HttpWebResponse response = (HttpWebResponse)request.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("UTF-8")); string respHtml; try { respHtml = reader.ReadToEnd(); } catch (Exception e) { throw e; } finally { reader.Close(); } return respHtml;}
Uri地址构建自定义类,是为了取代常用的拼接字符串方法实现查询字符串地址的拼接,开发者写了一个自定义的类继承了微软框架中的UriBuilder类,增加了查询字符串的拼接和并入方法。
Uri地址构建自定义改进类
/// <summary> /// Uri地址构建自定义改进类 /// </summary> public class UriBuilderImprove : UriBuilder { //查询字符串键值对集合 Dictionary<string, string> queryString = null; #region Properties public Dictionary<string, string> QueryString { get { if (queryString == null) { queryString = new Dictionary<string, string>(); } return queryString; } } public string PageName { get { string path = base.Path; return path.Substring(path.LastIndexOf("/") + 1); } set { string path = base.Path; path = path.Substring(0, path.LastIndexOf("/")); base.Path = string.Concat(path, "/", value); } } #endregion #region 重载构造函数 public UriBuilderImprove():base(){} public UriBuilderImprove(string uri):base(uri) { PopulateQueryString(); } public UriBuilderImprove(Uri uri): base(uri) { PopulateQueryString(); } public UriBuilderImprove(string schemeName, string hostName): base(schemeName, hostName){} public UriBuilderImprove(string scheme, string host, int portNumber): base(scheme, host, portNumber){} public UriBuilderImprove(string scheme, string host, int port, string pathValue): base(scheme, host, port, pathValue){} public UriBuilderImprove(string scheme, string host, int port, string path, string extraValue): base(scheme, host, port, path, extraValue){} #endregion /// <summary> /// 获取据对的Uri地址字符串 /// </summary> /// <returns></returns> public new string ToString() { GetQueryString(); return base.Uri.AbsoluteUri; } /// <summary> /// 填入查询字符串 /// </summary> private void PopulateQueryString() { string query = base.Query; if (query == string.Empty || query == null) { return; } if (queryString == null) { queryString = new Dictionary<string, string>(); } queryString.Clear(); query = query.Substring(1); //remove the ? string[] pairs = query.Split(new char[] { '&' }); foreach (string s in pairs) { string[] pair = s.Split(new char[] { '=' }); queryString[pair[0]] = (pair.Length > 1) ? pair[1] : string.Empty; } } /// <summary> /// 拼接查询字符串 /// </summary> private void GetQueryString() { int count = queryString.Count; if (count == 0) { base.Query = string.Empty; return; } string[] keys = new string[count]; string[] values = new string[count]; string[] pairs = new string[count]; queryString.Keys.CopyTo(keys, 0); queryString.Values.CopyTo(values, 0); for (int i = 0; i < count; i++) { pairs[i] = string.Concat(keys[i], "=", Uri.EscapeDataString(values[i])); } base.Query = string.Join("&", pairs); } }
整个小米开发OAuth2.0的SDK核心的代码就这么多,一个拼接接口地址,一个根据拼接成的uri地址返回所需的小米用户数据。剩下的SDK代码主要是涉及一些小米OAuth的专用名词,uri,和一些加密算法,大家都可以在小米开发者文档中找到,这里就不在占用篇幅了。
0 0
- 小米OAuth2.0 C#版SDK源代码学习
- OAuth2.0协议学习
- OAuth2.0 学习笔记
- OAuth2.0学习
- OAuth2.0学习笔记
- 2012新浪微博Andnroid版基于Oauth2.0的授权源代码
- OAuth2.0 学习(一) OAuth2.0 工作流程
- 腾讯微博 android Oauth2.0 SDK 使用介绍
- OAuth2.0 学习(二) Server 设计
- 学习 OAuth2.0 笔记( 一 )
- 【OAuth2.0学习笔记一】原理介绍
- OAuth2.0的学习和实践
- Spring cloud oauth2.0学习总结
- 小米sdk接入
- OAuth2.0
- OAuth2.0
- OAuth2.0
- OAuth2.0
- 与listView功能相近的gallery,主讲gallery
- 【转】iOS APP 产品设计流程
- Android——编译体系中的【PRODUCT_COPY_FILES】【ALL_PREBUILT】【BUILD_PREBUILT
- 自媒体如何写出好的文章内容
- 异常
- 小米OAuth2.0 C#版SDK源代码学习
- 蓝桥杯_PREV_4剪格子
- 常用LCD尺寸
- Linux下的虚拟Bridge实现
- IDF-CTF-牛刀小试-聪明的小羊
- 字符串的相等比较
- 再次出发
- 第十二周项目四 点圆的关系
- Docker