oAuth2.0 登录新浪微博 发送新浪微博 代码
1 public class SinaoAuth 2 { 3 string APIHost = ""; 4 public SinaoAuth() 5 { 6 APIHost = SinaConfig.Sina_Host; 7 } 8 9 #region 绑定微博帐号 10 /// <summary> 11 /// 绑定微博帐号 12 /// </summary> 13 /// <param name="username">新浪微博的登录帐号</param> 14 /// <param name="password">新浪微博的登录密码</param> 15 /// <returns>失败返回null</returns> 16 public string Binding(String username, String password) 17 { 18 if (String.IsNullOrEmpty(username) || String.IsNullOrEmpty(password)) 19 { 20 return null; 21 } 22 string apiUrl = "https://api.weibo.com/oauth2/access_token?client_id=" + SinaConfig.Sina_AppKey + "&client_secret=" + SinaConfig.Sina_AppSecurity + "&grant_type=password&username=" + username + "&password=" + password; 23 24 try 25 { 26 HttpWebRequest webReq = (HttpWebRequest)HttpWebRequest.Create(apiUrl); 27 webReq.Method = "POST"; 28 webReq.Timeout = 2000; 29 //webReq.Headers.Add("Authorization", header); 30 HttpWebResponse webRsp = (HttpWebResponse)webReq.GetResponse(); 31 32 using (StreamReader reader = new StreamReader(webRsp.GetResponseStream())) 33 { 34 string rsp = reader.ReadToEnd(); 35 AccessTokenResponse accessToken = new AccessTokenResponse(rsp); 36 if (accessToken != null && accessToken.IsValid) 37 { 38 return accessToken.AccessToken; 39 } 40 else 41 { 42 return null; 43 } 44 } 45 } 46 catch (WebException e) 47 { 48 return GetErrorMessage(e); 49 } 50 } 51 52 private string GetErrorMessage(WebException e) 53 { 54 try 55 { 56 HttpWebResponse webResponse = e.Response as HttpWebResponse; 57 StreamReader myread = new StreamReader(webResponse.GetResponseStream()); 58 string error = myread.ReadToEnd(); 59 ErrorMessage errorMessage = new ErrorMessage(error); 60 return errorMessage.Error_code; 61 } 62 catch (Exception ex) 63 { 64 return ex.Message; 65 throw; 66 } 67 } 68 69 /// <summary> 70 /// 用web方式登录 71 /// </summary> 72 /// <param name="code"></param> 73 /// <returns></returns> 74 public string Binding(string code) 75 { 76 string apiUrl = "https://api.weibo.com/oauth2/access_token?client_id="+SinaConfig.Sina_AppKey+"&client_secret="+ 77 SinaConfig.Sina_AppSecurity + "&grant_type=authorization_code&redirect_uri=http://sae.sina.com.cn/&code="+code; 78 try 79 { 80 HttpWebRequest webReq = (HttpWebRequest)HttpWebRequest.Create(apiUrl); 81 webReq.Method = "POST"; 82 webReq.Timeout = 2000; 83 //webReq.Headers.Add("Authorization", header); 84 HttpWebResponse webRsp = (HttpWebResponse)webReq.GetResponse(); 85 86 using (StreamReader reader = new StreamReader(webRsp.GetResponseStream())) 87 { 88 string rsp = reader.ReadToEnd(); 89 AccessTokenResponse accessToken = new AccessTokenResponse(rsp); 90 if (accessToken != null && accessToken.IsValid) 91 { 92 return accessToken.AccessToken; 93 } 94 else 95 { 96 return null; 97 } 98 } 99 } 100 catch (WebException e) 101 { 102 return GetErrorMessage(e); 103 } 104 } 105 106 /// <summary> 107 /// 直接发送微博 108 /// </summary> 109 /// <param name="access_token"></param> 110 /// <param name="status"></param> 111 /// <returns></returns> 112 public string update(string access_token,string status) 113 { 114 string apiUrl = "https://api.weibo.com/2/statuses/update.json"; 115 try 116 { 117 HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(apiUrl); 118 request.Method = "POST"; 119 request.Timeout = 2000; 120 request.ContentType = "application/x-www-form-urlencoded"; 121 System.Text.Encoding encoding = System.Text.Encoding.ASCII; 122 byte[] bytesToPost = encoding.GetBytes("access_token=" + access_token + "&status=" + UrlEncode(status)); 123 request.ContentLength = bytesToPost.Length; 124 System.IO.Stream requestStream = request.GetRequestStream(); 125 requestStream.Write(bytesToPost, 0, bytesToPost.Length); 126 requestStream.Close(); 127 128 HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 129 using (StreamReader reader = new StreamReader(response.GetResponseStream())) 130 { 131 string rsp = reader.ReadToEnd(); 132 if (rsp != "") 133 { 134 return "SUCCESS"; 135 } 136 } 137 return null; 138 } 139 catch (WebException ex) 140 { 141 return GetErrorMessage(ex); 142 } 143 } 144 145 public static string UrlEncode(string str) 146 { 147 StringBuilder sb = new StringBuilder(); 148 byte[] byStr = System.Text.Encoding.UTF8.GetBytes(str); //默认是System.Text.Encoding.Default.GetBytes(str) 149 for (int i = 0; i < byStr.Length; i++) 150 { 151 sb.Append(@"%" + Convert.ToString(byStr[i], 16)); 152 } 153 154 return (sb.ToString()); 155 } 156 157 /// <summary> 158 /// 发送带图片的微博 159 /// </summary> 160 /// <param name="access_token"></param> 161 /// <param name="status">文字内容</param> 162 /// <param name="pic">图片的byte流</param> 163 /// <returns></returns> 164 public string ShareImg(string access_token,string status,byte[] pic) 165 { 166 string apiUrl = "https://api.weibo.com/2/statuses/upload.json?access_token=" + access_token + "&status=" +UrlEncode(status) + "&pic=" + @pic + ""; 167 168 try 169 { 170 HttpWebRequest webReq = (HttpWebRequest)HttpWebRequest.Create(apiUrl); 171 webReq.Method = "POST"; 172 webReq.Timeout = 2000; 173 string boundary = Guid.NewGuid().ToString(); 174 //webReq.ContentType = string.Format("text/html; charset=GBK"); 175 webReq.ContentType=string.Format("multipart/form-data; boundary={0}", boundary); 176 byte[] contents = getMultipartContent(status, pic, boundary); 177 webReq.ContentLength = contents.Length; 178 webReq.GetRequestStream().Write(contents, 0, contents.Length); 179 180 HttpWebResponse webRsp = (HttpWebResponse)webReq.GetResponse(); 181 182 using (StreamReader reader = new StreamReader(webRsp.GetResponseStream())) 183 { 184 string rsp = reader.ReadToEnd(); 185 if (rsp != "") 186 { 187 return "SUCCESS"; 188 } 189 } 190 return null; 191 } 192 catch (WebException e) 193 { 194 return GetErrorMessage(e); 195 } 196 } 197 198 199 private byte[] getMultipartContent(string msg, byte[] pic, string boundary) 200 { 201 string contentEncoding = "iso-8859-1"; 202 string header = string.Format("--{0}", boundary); 203 string footer = string.Format("--{0}--", boundary); 204 205 StringBuilder contents = new StringBuilder(); 206 contents.AppendLine(header); 207 contents.AppendLine(String.Format("Content-Disposition: form-data; name=\"{0}\"", "status")); 208 contents.AppendLine("Content-Type: text/plain; charset=US-ASCII"); 209 contents.AppendLine("Content-Transfer-Encoding: 8bit"); 210 contents.AppendLine(); 211 contents.AppendLine(UrlEncode(msg)); 212 213 contents.AppendLine(header); 214 contents.AppendLine(string.Format("Content-Disposition: form-data; name=\"{0}\"", "source")); 215 contents.AppendLine("Content-Type: text/plain; charset=US-ASCII"); 216 contents.AppendLine("Content-Transfer-Encoding: 8bit"); 217 contents.AppendLine(); 218 contents.AppendLine(SinaConfig.Sina_AppKey); 219 220 contents.AppendLine(header); 221 string fileHeader = string.Format("Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"", "pic", ""); 222 string fileData = System.Text.Encoding.GetEncoding(contentEncoding).GetString(pic); 223 224 contents.AppendLine(fileHeader); 225 contents.AppendLine("Content-Type: application/octet-stream; charset=UTF-8"); 226 contents.AppendLine("Content-Transfer-Encoding: binary"); 227 contents.AppendLine(); 228 contents.AppendLine(fileData); 229 contents.AppendLine(footer); 230 231 return Encoding.GetEncoding(contentEncoding).GetBytes(contents.ToString()); 232 } 233 234 #endregion 235 }
提供学习交流,不正确的希望园子们指出来 谢谢 哈。
转载于:https://www.cnblogs.com/Lovetuya/archive/2012/04/11/2442366.html
oAuth2.0 登录新浪微博 发送新浪微博 代码相关推荐
- 微信公众平台开发三:微信的OAuth2.0登录开发
1. 微信支付项目三:实现微信OAuth2.0一键登录开发 文章目录 1. 微信支付项目三:实现微信OAuth2.0一键登录开发 2. 登录方式的优缺点和微信一键登录 3. 微信登录步骤 4. 微信一 ...
- 整合spring cloud云架构 - SSO单点登录之OAuth2.0登录认证(1)
之前写了很多关于spring cloud的文章,今天我们对OAuth2.0的整合方式做一下笔记,首先我从网上找了一些关于OAuth2.0的一些基础知识点,帮助大家回顾一下知识点: 一.oauth中的角 ...
- JAVA springboot ssm b2b2c多用户商城系统源码-SSO单点登录之OAuth2.0登录流程(2)
上一篇是站在巨人的肩膀上去研究OAuth2.0,也是为了快速帮助大家认识OAuth2.0,闲话少说,我根据框架中OAuth2.0的使用总结,画了一个简单的流程图(根据用户名+密码实现OAuth2.0的 ...
- Java架构-(十) 整合spring cloud云架构 - SSO单点登录之OAuth2.0登录认证(1)
之前写了很多关于spring cloud的文章,今天我们对OAuth2.0的整合方式做一下笔记,首先我从网上找了一些关于OAuth2.0的一些基础知识点,帮助大家回顾一下知识点: 一.oauth中的角 ...
- java B2B2C Springboot电子商务平台源码-SSO单点登录之OAuth2.0登录认证
之前写了很多关于spring cloud的文章,今天我们对OAuth2.0的整合方式做一下笔记,首先我从网上找了一些关于OAuth2.0的一些基础知识点,帮助大家回顾一下知识点: 一.oauth中的角 ...
- (十) 整合spring cloud云架构 - SSO单点登录之OAuth2.0登录认证(1)
之前写了很多关于spring cloud的文章,今天我们对OAuth2.0的整合方式做一下笔记,首先我从网上找了一些关于OAuth2.0的一些基础知识点,帮助大家回顾一下知识点: 一.oauth中的角 ...
- (十)Java B2B2C o2o多用户商城 springcloud架构- SSO单点登录之OAuth2.0登录认证(1)
2019独角兽企业重金招聘Python工程师标准>>> 之前写了很多关于spring cloud的文章,今天我们对OAuth2.0的整合方式做一下笔记,首先我从网上找了一些关于OAu ...
- (十)java版b2b2c社交电商spring cloud分布式微服务- SSO单点登录之OAuth2.0登录认证(1)...
之前写了很多关于spring cloud的文章,今天我们对OAuth2.0的整合方式做一下笔记,首先我从网上找了一些关于OAuth2.0的一些基础知识点,帮助大家回顾一下知识点:Spring Clou ...
- (八)java版spring cloud+spring boot+redis多租户社交电子商务平台 -SSO单点登录之OAuth2.0登录认证(2)...
电子商务平台源码请加企鹅求求:一零三八七七四六二六.上一篇是站在巨人的肩膀上去研究OAuth2.0,也是为了快速帮助大家认识OAuth2.0,闲话少说,我根据框架中OAuth2.0的使用总结,画了一个 ...
- Spring Cloud云架构 - SSO单点登录之OAuth2.0登录认证(1)
今天我们对OAuth2.0的整合方式做一下笔记,首先我从网上找了一些关于OAuth2.0的一些基础知识点,帮助大家回顾一下知识点: 一.oauth中的角色 client:调用资源服务器API的应用 O ...
最新文章
- linux 下安装MySQL
- 五笔字根表识别码图_精选五笔输入法拆字原则,值得收藏
- java实现zip与unzip
- 产品经理日常表情包大全,多说是泪拿走不谢!
- python爬虫从入门到放弃(二)之爬虫的原理
- 深度学习实战:基于bilstm或者dialated convolutions做NER
- Python 学习笔记(2)字典默认值和集合的操作
- Linux:Access time、 Modify time 、Change time 和 find 命令使用解析
- 跟随我在oracle学习php(51)
- html页面之间传参乱码,急求教,在两个htm页面传参数时中文出现了乱码,试了网上的方法不管用。_html/css_WEB-ITnose...
- JSON与XML的选择
- PHP控制网页过期时间的代码!
- dart 语言中的列表(List)
- [转][整理]Linux下找不到共享库(shared object)
- 解析UML箭头、线条代表的意义
- 菜鸟之路---1,熊猫烧香病毒的简单分析
- php 制作通讯录,PHP 制作通讯录(五)
- 配置文件(properties类)
- 计划的主体部分应有哪些内容_计划练习题
- 计算机网络在资源共享信息交换的体会,计算机网络学习心得体会.doc
热门文章
- 4位16色灰度图像处理
- 大数据职业理解_到底什么是大数据,大数据职业的具体工作内容是什么?
- 代码统计工具有哪几种_跟我学“Linux”小程序Web版开发(四):引入统计及Crash收集...
- xilinx c语言编程,使用Xilinx SDSoc在Xilinx zcu102开发板上编程HelloWorld
- JAVA vector的遍历_谈谈vector容器的三种遍历方法
- 换脸系列——眼鼻口替换
- python超神之路:创建对象的9种方法
- vue中v-for的使用
- 算法 - 排序稳定性总结
- TOMCAT启动到一半停止如何解决