Unity3D 网络通信_HTTP协议、处理Json格式返回值、请求加Oauth
2014-07-03 11:25
543 查看
Unity3D 网络通信_HTTP协议、处理Json格式返回值、请求加Oauth
post
![](http://img.blog.csdn.net/20140703113427250?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcHF5MTUwMDU5MTcxODU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
get
![](http://img.blog.csdn.net/20140703113552875?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcHF5MTUwMDU5MTcxODU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
登录
oauth使用在headers中加入Date,date.ToString("ddd, yyyy-mm-dd HH':'mm':'ss 'UTC'",DateTimeFormatInfo.InvariantInfo)对日期的格式化
string time = date.ToString("ddd, yyyy-mm-dd HH':'mm':'ss 'UTC'",DateTimeFormatInfo.InvariantInfo);
headers["Date"] = time;
www.text为后台返回的String字符串,是Json格式,但是不可以直接用key-value去取值,我们需要去转换使用LitJson,一个第三方插件
![](http://img.blog.csdn.net/20140704090604640?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcHF5MTUwMDU5MTcxODU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
JsonData jd = JsonMapper.ToObject(www.text);
string memberId = jd["memberId"].ToString();
string bonusPoint = jd["bonusPoint"].ToString();
string nickName = jd["nickName"].ToString();
在unity\项目\Assets\Plugins目录下引用LitJson,下载LitJson
![](http://img.blog.csdn.net/20140704091111531?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcHF5MTUwMDU5MTcxODU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
之后就可以用key-value去取值了
oauth的加入
public static string API_KEY = "bc543dc89b***********";
public static string SECURE_KEY = "32df2bc3520d53a1************";
StringBuilder stringToSign = new StringBuilder();
stringToSign.Append("POST").Append("\n");
stringToSign.Append(time).Append("\n");
stringToSign.Append(path).Append("\n");
需要通过 httpMethod、time、和path(格式为"/film/api/tqh/v2/public/getAllHistoryRank")来获取HMACSHA512加密后的签名
var hmac = new HMACSHA512(Encoding.UTF8.GetBytes(SECURE_KEY))
对API_KEY和签名进行编码,签名编码两次是因为,在服务器被解码了两次一次jetty、一次后台
StringBuilder s = new StringBuilder();s.Append(url);s.Append("&apiKey=");s.Append(HttpUtility.UrlEncode(API_KEY,
Encoding.UTF8));s.Append("&signature=");s.Append(HttpUtility.UrlEncode(HttpUtility.UrlEncode(signature, Encoding.UTF8), Encoding.UTF8));
HttpUtility使用需要引入的 using System.Web; 下载HttpUtility
![](http://img.blog.csdn.net/20140704093333500?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcHF5MTUwMDU5MTcxODU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](http://img.blog.csdn.net/20140704093348484?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcHF5MTUwMDU5MTcxODU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
post
get
登录
using UnityEngine; using System.Collections; using System.Collections.Generic; using System.Text; using System.Security.Cryptography; using System.Security.Authentication; using LitJson; using System; using System.Globalization; using System.Security.Cryptography; using System.Web; public static string url = "http://localhost:8080/film/"; public void Login(string username , string password) { string path = "/film/api/tqh/v2/member/login"; StartCoroutine(PostLogin(url+"api/tqh/v2/member/login?",path,username,password)); }
IEnumerator PostLogin(string url,string path,string username , string password) { string input = "{\"email\":\""+username+"\",\"password\":\""+ ToMd5(password)+"\"}"; WWWForm form = new WWWForm(); Hashtable headers = form.headers; byte[] rawData = Encoding.UTF8.GetBytes(input); headers["Content-Type"] = "application/json"; headers["Accept"] = "application/json"; DateTime date = DateTime.Now; string time = date.ToString("ddd, yyyy-mm-dd HH':'mm':'ss 'UTC'",DateTimeFormatInfo.InvariantInfo); headers["Date"] = time; url = hmac(url,path,time); WWW www = new WWW(url, rawData, headers); yield return www; if (www.error != null) { Debug.Log("error is login:"+ www.error + " " +input ); camara.GetComponent<loginGUI>().loginfail(status_fail); } else { Debug.Log("request ok login: " + www.text); JsonData jd = JsonMapper.ToObject(www.text); string memberId = jd["memberId"].ToString(); string bonusPoint = jd["bonusPoint"].ToString(); string nickName = jd["nickName"].ToString(); camara.GetComponent<loginGUI>().loginsuccess(memberId,nickName,bonusPoint,status_success); } }
oauth使用在headers中加入Date,date.ToString("ddd, yyyy-mm-dd HH':'mm':'ss 'UTC'",DateTimeFormatInfo.InvariantInfo)对日期的格式化
string time = date.ToString("ddd, yyyy-mm-dd HH':'mm':'ss 'UTC'",DateTimeFormatInfo.InvariantInfo);
headers["Date"] = time;
www.text为后台返回的String字符串,是Json格式,但是不可以直接用key-value去取值,我们需要去转换使用LitJson,一个第三方插件
JsonData jd = JsonMapper.ToObject(www.text);
string memberId = jd["memberId"].ToString();
string bonusPoint = jd["bonusPoint"].ToString();
string nickName = jd["nickName"].ToString();
在unity\项目\Assets\Plugins目录下引用LitJson,下载LitJson
之后就可以用key-value去取值了
oauth的加入
public static string API_KEY = "bc543dc89b***********";
public static string SECURE_KEY = "32df2bc3520d53a1************";
public string hmac(string url ,string path ,string time){ StringBuilder stringToSign = new StringBuilder(); stringToSign.Append("POST").Append("\n"); stringToSign.Append(time).Append("\n"); stringToSign.Append(path).Append("\n"); var signature = string.Empty; using (var hmac = new HMACSHA512(Encoding.UTF8.GetBytes(SECURE_KEY))) { var hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(stringToSign.ToString())); signature = Convert.ToBase64String(hash); } StringBuilder s = new StringBuilder(); s.Append(url); s.Append("&apiKey="); s.Append(HttpUtility.UrlEncode(API_KEY, Encoding.UTF8)); s.Append("&signature="); s.Append(HttpUtility.UrlEncode(HttpUtility.UrlEncode(signature, Encoding.UTF8), Encoding.UTF8)); return s.ToString(); }
StringBuilder stringToSign = new StringBuilder();
stringToSign.Append("POST").Append("\n");
stringToSign.Append(time).Append("\n");
stringToSign.Append(path).Append("\n");
需要通过 httpMethod、time、和path(格式为"/film/api/tqh/v2/public/getAllHistoryRank")来获取HMACSHA512加密后的签名
var hmac = new HMACSHA512(Encoding.UTF8.GetBytes(SECURE_KEY))
对API_KEY和签名进行编码,签名编码两次是因为,在服务器被解码了两次一次jetty、一次后台
StringBuilder s = new StringBuilder();s.Append(url);s.Append("&apiKey=");s.Append(HttpUtility.UrlEncode(API_KEY,
Encoding.UTF8));s.Append("&signature=");s.Append(HttpUtility.UrlEncode(HttpUtility.UrlEncode(signature, Encoding.UTF8), Encoding.UTF8));
HttpUtility使用需要引入的 using System.Web; 下载HttpUtility
相关文章推荐
- Unity3D 网络通信_HTTP协议、处理Json格式返回值、请求加Oauth
- ios网络学习------5 json格式数据的请求处理
- ios网络学习------6 json格式数据的请求处理
- 网络通信第三课 HTTP请求数据携带Json数据格式分析
- 网络请求链接为JSon格式时的处理办法
- 【Android应用开发技术:网络通信】Android下的JSON处理
- 2.0通信之调用REST服务,处理JSON格式, XML格式, RSS/ATOM格式的数据
- 网络请求中文编码格式问题处理
- struts1 采用json格式发送异步请求,并且获取action处理后的json数据
- 上接稳扎稳打Silverlight(19) - 2.0通信之调用REST服务,处理JSON格式, XML格式, RSS/ATOM格式的数据
- C# winform端 通过HttpWebRequest进行post和get请求,数据格式为json,后台java端接收,其中有关传输特殊字符(\t,\r,',\n,n)等处理
- Ajax---通过JSON与服务器通信(发送请求和处理响应)
- 网络编程之TCP通信,为什么在Serve端为每个Client端开辟一个单独的线程来处理Client的请求
- jQuery的$.post请求传值——返回值为json格式
- json格式数据的请求处理
- 【网络通信:Volley】请求的发送与响应之JSON
- 稳扎稳打Silverlight(19) - 2.0通信之调用REST服务,处理JSON格式, XML格式, RSS/ATOM格式的数据
- SpringMVC处理Ajax请求(请求数据为 json 格式字符串)
- json xml 网络请求是用的传输数据的格式
- Android网络通信中数据传输的JSON格式使用