概述
www使用方法
- 概念
- 请求类型
- Get 请求
- Post请求
- 实际使用
- 要实现的功能
- Get请求
- Post请求
- Headers头验证
概念
WWW基于HTTP协议,我们可以用它来发送HTTP请求。
一般来说,请求有两种方式:
- Get请求
- Post请求
请求类型
Get 请求
Get请求,会将数据携带在url中,而且最多只能传递1024个字节。
假设我们要向指定的 url:http://dict.youdao.com/suggest发送
- user(账号) = 123
- pwd(密码) = 456
那么使用起来是这样的:
要发送的url:"http://dict.youdao.com/suggest";
携带数据后的url:"http://dict.youdao.com/suggest?user=123&pwd=456"
WWW www = new WWW(url)
可以看到数据是包裹在url中,不是挺安全
Post请求
Post请求,数据可以用WWWFrom(类似字典键值对)携带,也可以转成二进制流。这样数据不会携带在url中,更安全,而且没有数据长度限制。
使用起来大概是这样的
WWWForm wwwForm = new WWWForm();
wwwForm.AddField("user","123");
wwwForm.AddField("pwd","456");
WWW www = new WWW(url,wwwForm);
实际使用
前面讲了概念,接下来我们来具体使用一下。
要实现的功能
我在网上找了一个可以查询单词的API,链接在这里,接下来我们用它来查 heart 这个单词。
- url = “http://dict.youdao.com/suggest”
参数: - q = 要查的单词;
- doctype = 要返回的格式,默认是xml;
Get请求
IEnumerator WWW_Get()
{
string url = "http://dict.youdao.com/suggest";
string contentFormat = "?q={0}&doctype=json";
string word = "heart";
//拼接好最后的url
string finalStr = url + string.Format(contentFormat, word);
WWW www = new WWW(finalStr);
yield return www;
//如果error是空的,说明访问成功
if (string.IsNullOrEmpty(www.error))
{
Debug.LogWarning($"success,content:{www.text}");
}
else
{
Debug.LogWarning($"failed,msg:{www.error}");
}
}
请求结果
success,content:{"result":{"msg":"success","code":200},"data":{"entries":[{"explain":"n. 心脏;感情;勇气;心形;要点; vt. 鼓励;铭记; vi. 结心; n. (Heart)人名...","entry":"heart"},{"explain":"adj. 衷心的;真诚的;真心真意的","entry":"heartfelt"},{"explain":"n. 灶台;炉边;炉床;壁炉地面; n. (Hearth)人名;(英)哈思","entry":"hearth"},{"explain":"adj. 衷心的;丰盛的;健壮的;精神饱满的; n. 朋友们;伙伴们","entry":"hearty"},{"explain":"n. 心跳;情感","entry":"heartbeat"}],"query":"heart","language":"en","type":"dict"}}
Post请求
IEnumerator WWW_Post_Form()
{
//https://www.free-api.com/doc/522
WWWForm wwwForm = new WWWForm();
wwwForm.AddField("q","heart");//设置要查询单词
wwwForm.AddField("doctype","json");//设置返回的数据格式为json
string url = "http://dict.youdao.com/suggest";
WWW www = new WWW(url,wwwForm);
yield return www;
if (string.IsNullOrEmpty(www.error))
{
Debug.LogWarning($"success,content:{www.text}");
}
else
{
Debug.LogWarning($"failed,msg:{www.error}");
}
}
返回的结果和Get请求的结果是一样的。
Headers头验证
上面讲述了Get/Post的用法,一般来说这样使用就足够了。不过发送Post请求时,还允许我们加上Headers头验证。
这个有什么作用呢,这个可以用来告知服务器我们传送的数据格式,比如可以说明我们传送过去的数据是默认格式或是json格式;网上查了一下,貌似也可以加上一些验证头,防止恶意访问。
这个一般来说是与服务器有什么约定,然后再按约定加上去就可以了。
我们了解下怎么使用就好,我们先看一下www的构造方法
public WWW(string url) //get请求可以使用
public WWW(string url, WWWForm form) //post请求,使用form携带数据
public WWW(string url, byte[] postData) //post请求,传递数据流
public WWW(string url, byte[] postData, Dictionary<string, string> headers)//post请求,允许携带hearders数据
第1个方法和第2个方法上面已经讲过了。
第3个方法,传递二进制数据。
其实依然可以像第2个方法那样用wwwForm携带数据。最后使用 wwwForm.data 获得二进制流,传入就可以。
第4个方法和第3个方法一样,只是最后加了一个字典参数,用于携带验证数据
接下来我们上第4个方法的使用代码
IEnumerator WWW_Post_Bytes()
{
WWWForm wwwForm = new WWWForm();
wwwForm.AddField("q","heart");
wwwForm.AddField("doctype","json");
string url = "http://dict.youdao.com/suggest";
//这里添加headers字典
Dictionary<string, string> postHeader = new Dictionary<string, string>();
postHeader.Add("Content-Type", "application/x-www-form-urlencoded"); //默认
// postHeader.Add("Content-Type", "application/json");//json
WWW www = new WWW(url,wwwForm.data,postHeader);
yield return www;
if (string.IsNullOrEmpty(www.error))
{
Debug.LogWarning($"success,content:{www.text}");
}
else
{
Debug.LogWarning($"failed,msg:{www.error}");
}
}
其实就是一个字典,然后把约定好的数据传入就可以~
最后
以上就是健忘菠萝为你收集整理的Unity WWW使用方法概念请求类型实际使用的全部内容,希望文章能够帮你解决Unity WWW使用方法概念请求类型实际使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复