ylbtech-C#-Code:GET/POST |
1.返回顶部 |
·调用方法
#region 应用授权 #region 应用授权_获取知识管理授权 public string GetAuthenticate_Confluence(UserInfo user) { string res = "0"; string uri = "http://crowd.sp.com/crowd/rest/usermanagement/latest/session?validate-password=false"; string username = "sppdm-crowd"; string password = "spPdm"; string uid = string.Empty; #region 获取统一ID var userInfo = repo.GetUserInfo(user.Username); string email = userInfo.Email; if (email != null) uid = email.Substring(0, email.IndexOf('@')); #endregion string paramStr = "{"username":"" + uid + ""}"; string xml = CrowdAuthentication.Request_WebClient(uri, paramStr, Encoding.ASCII, username, password); TokenInfo token = CrowdAuthentication.GetTokenInfo(xml); if (token.Token != "0") { HttpContext.Current.Response.Cookies.Add(new HttpCookie("pcitc.crowd.token") { Value = token.Token, Domain = ".pcitc.com", Expires = token.ExpiryDate }); res = "1"; } return res; } #endregion #endregion
·CrowdAuthentication.cs
using System; using System.Net; using System.Text; using System.Xml; namespace SP.Common { /// <summary> /// Crowd身份验证 /// </summary> public class CrowdAuthentication { public CrowdAuthentication() { // Class constructor. } /// <summary> /// 通过WebClient类Post数据到远程地址,需要Basic认证; /// 调用端自己处理异常 /// </summary> /// <param name="uri"></param> /// <param name="paramStr">name=张三&age=20|{"username":"fuchao.zhang"}</param> /// <param name="encoding">请先确认目标网页的编码方式</param> /// <param name="username"></param> /// <param name="password"></param> /// <returns></returns> public static string Request_WebClient(string uri, string paramStr, Encoding encoding, string username, string password) { if (encoding == null) encoding = Encoding.UTF8; string result = string.Empty; WebClient wc = new WebClient(); // 采取POST方式必须加的Header wc.Headers.Add("Content-Type", "application/json"); byte[] postData = encoding.GetBytes(paramStr); if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password)) { wc.Credentials = GetCredentialCache(uri, username, password); wc.Headers.Add("Authorization", GetAuthorization(username, password)); } byte[] responseData = wc.UploadData(uri, "POST", postData); // 得到返回字符流 return encoding.GetString(responseData);// 解码 } #region # 生成 Http Basic 访问凭证 # private static CredentialCache GetCredentialCache(string uri, string username, string password) { string authorization = string.Format("{0}:{1}", username, password); CredentialCache credCache = new CredentialCache(); credCache.Add(new Uri(uri), "Basic", new NetworkCredential(username, password)); return credCache; } private static string GetAuthorization(string username, string password) { string authorization = string.Format("{0}:{1}", username, password); return "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes(authorization)); } #endregion #region 获取Token public static TokenInfo GetTokenInfo(string xml) { TokenInfo token = new TokenInfo() { Token = "0" }; XmlDocument xmlDocMeta = new XmlDocument(); xmlDocMeta.LoadXml(xml); XmlNode node = null; node = xmlDocMeta.DocumentElement.SelectSingleNode("token"); if (node != null) token.Token = node.InnerText; node = xmlDocMeta.DocumentElement.SelectSingleNode("expiry-date"); if (node != null) token.ExpiryDate = Convert.ToDateTime(node.InnerText); return token; } #endregion } /// <summary> /// Token信息 /// </summary> public class TokenInfo { /// <summary> /// 令牌 /// </summary> public string Token { get; set; } /// <summary> /// 有效期 /// </summary> public DateTime ExpiryDate { get; set; } } }
·xml.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <session expand="user"> <token>m81nU03Kyni8DfOewvNcVg00</token> <user name="bo.yuan"> <link href="http://crowd.sp.com/crowd/rest/usermanagement/latest/user?username=bo.yuan" rel="self"/> </user> <link href="http://crowd.sp.com/crowd/rest/usermanagement/latest/session/m81nU03Kyni8DfOewvNcVg00" rel="self"/> <created-date>2020-12-08T09:33:52+08:00</created-date> <expiry-date>2020-12-10T07:17:23.305+08:00</expiry-date> </session>
·
2.返回顶部 |
·Authentication.cs
using System; using System.IO; using System.Net; using System.Text; using System.Web; namespace ConsoleApp { public class Authentication { #region POST方法(httpWebRequest) /// <summary> /// POST方法(httpWebRequest) /// post的cotentType填写:"application/x-www-form-urlencoded" /// soap填写:"text/xml; charset=utf-8" /// </summary> /// <param name="url"></param> /// <param name="body">body是要传递的参数,格式"roleId=1&uid=2"</param> /// <param name="contentType"></param> /// <returns></returns> public static string PostHttp(string url, string body, string contentType) { HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url); httpWebRequest.ContentType = contentType; httpWebRequest.Method = "POST"; httpWebRequest.Timeout = 20000; byte[] btBodys = Encoding.UTF8.GetBytes(body); httpWebRequest.ContentLength = btBodys.Length; httpWebRequest.GetRequestStream().Write(btBodys, 0, btBodys.Length); HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse(); StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream()); string responseContent = streamReader.ReadToEnd(); httpWebResponse.Close(); streamReader.Close(); httpWebRequest.Abort(); httpWebResponse.Close(); return responseContent; } #endregion #region POST方法(WebClient) /// <summary> /// 通过WebClient类Post数据到远程地址,需要Basic认证; /// 调用端自己处理异常 /// </summary> /// <param name="uri"></param> /// <param name="paramStr">name=张三&age=20</param> /// <param name="encoding">请先确认目标网页的编码方式</param> /// <param name="username"></param> /// <param name="password"></param> /// <returns></returns> public static string Request_WebClient(string uri, string paramStr, Encoding encoding, string username, string password) { if (encoding == null) encoding = Encoding.UTF8; string result = string.Empty; WebClient wc = new WebClient(); // 采取POST方式必须加的Header wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); byte[] postData = encoding.GetBytes(paramStr); if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password)) { wc.Credentials = GetCredentialCache(uri, username, password); wc.Headers.Add("Authorization", GetAuthorization(username, password)); } byte[] responseData = wc.UploadData(uri, "POST", postData); // 得到返回字符流 return encoding.GetString(responseData);// 解码 } #endregion #region Get方法(HttpWebRequest) public static string GetHttp(string url, HttpContext httpContext) { string queryString = "?"; foreach (string key in httpContext.Request.QueryString.AllKeys) { queryString += key + "=" + httpContext.Request.QueryString[key] + "&"; } queryString = queryString.Substring(0, queryString.Length - 1); HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url + queryString); httpWebRequest.ContentType = "application/json"; httpWebRequest.Method = "GET"; httpWebRequest.Timeout = 20000; //byte[] btBodys = Encoding.UTF8.GetBytes(body); //httpWebRequest.ContentLength = btBodys.Length; //httpWebRequest.GetRequestStream().Write(btBodys, 0, btBodys.Length); HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse(); StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream()); string responseContent = streamReader.ReadToEnd(); httpWebResponse.Close(); streamReader.Close(); return responseContent; } #endregion #region basic验证的WebRequest/WebResponse /// <summary> /// 通过 WebRequest/WebResponse 类访问远程地址并返回结果,需要Basic认证; /// 调用端自己处理异常 /// </summary> /// <param name="uri"></param> /// <param name="timeout">访问超时时间,单位毫秒;如果不设置超时时间,传入0</param> /// <param name="encoding">如果不知道具体的编码,传入null</param> /// <param name="username"></param> /// <param name="password"></param> /// <returns></returns> public static string Request_WebRequest(string uri, int timeout, Encoding encoding, string username, string password) { string result = string.Empty; WebRequest request = WebRequest.Create(new Uri(uri)); if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password)) { request.Credentials = GetCredentialCache(uri, username, password); request.Headers.Add("Authorization", GetAuthorization(username, password)); } if (timeout > 0) request.Timeout = timeout; WebResponse response = request.GetResponse(); Stream stream = response.GetResponseStream(); StreamReader sr = encoding == null ? new StreamReader(stream) : new StreamReader(stream, encoding); result = sr.ReadToEnd(); sr.Close(); stream.Close(); return result; } #endregion #region # 生成 Http Basic 访问凭证 # private static CredentialCache GetCredentialCache(string uri, string username, string password) { string authorization = string.Format("{0}:{1}", username, password); CredentialCache credCache = new CredentialCache(); credCache.Add(new Uri(uri), "Basic", new NetworkCredential(username, password)); return credCache; } private static string GetAuthorization(string username, string password) { string authorization = string.Format("{0}:{1}", username, password); return "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes(authorization)); } #endregion } }
·
3.返回顶部 |
4.返回顶部 |
5.返回顶部 |
6.返回顶部 |
作者:ylbtech 出处:http://ylbtech.cnblogs.com/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 |