WWW网络请求
采用WWW获取网络数据:
(一)get
1)天气数据下载
private string weatherApi = "http://www.sojson.com/open/api/weather/json.shtml?city={0}";
//private string weatherApi = "http://www.sojson.com/open/api/weather/xml.shtml?city={0}"; //xml format
public string city = "闵行区";
private string fullWeatherApi;
public void OnRequest()
{
StartCoroutine(DataRequest(fullWeatherApi));
}
private bool isResponseValid(WWW www)
{
if (www.error != null)
{
print("Conn failed!");
return false;
}
if(string.IsNullOrEmpty(www.text))
{
print("Bad result");
return false;
}
return true;
}
private IEnumerator DataRequest(string url)
{
WWW www = new WWW(url);
yield return www;
if (!isResponseValid(www)) yield break;
print(www.text);
}
2)texture下载
public GameObject quad;
private Texture2D downloadTexture; public void OnRequest()
{
ImageManage(SetSpirite);
} private void ImageManage(Action<Texture2D> action)
{
if(downloadTexture ==null)//缓存检测
{
StartCoroutine(ImageRequest(beautyApi, action));
}
else
{
action(downloadTexture);
}
} private IEnumerator ImageRequest(string url,Action<Texture2D> action)
{
WWW www = new WWW(url);
yield return www;
print("request");
downloadTexture = www.texture;
action(www.texture);
} private void SetSpirite(Texture2D texture)
{
quad.GetComponent<MeshRenderer>().material.mainTexture = texture;
}
(二)post
public string url = "https://api-cn.faceplusplus.com/facepp/v3/detect";
private Hashtable postData = new Hashtable(); public void OnRequest()
{
StartCoroutine(RequestData());
}
IEnumerator RequestData()
{
WWWForm postForm = new WWWForm(); foreach(DictionaryEntry arg in postData)
{
postForm.AddField(arg.Key.ToString(), arg.Value.ToString());
} WWW www = new WWW(url, postForm);
yield return www;
print(www.text);
}
// Use this for initialization
void Start () {
postData.Add("api_key", "**************");
postData.Add("api_secret", "**************");
postData.Add("image_url", "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1508759666809&di=b3748df04c5e54d18fe52ee413f72f37&imgtype=0&src=http%3A%2F%2Fimgsrc.baidu.com%2Fimgad%2Fpic%2Fitem%2F562c11dfa9ec8a1389c45414fd03918fa1ecc06c.jpg");
} // Update is called once per frame
void Update () { }
补充:
post文件可通过WWWForm的AddBinaryData方法即可

第一个参数即为要post的文件的参数名称,第二参数为byte[]类型的文件,第三个为文件名称,第四个为类型。后两个参数可略掉。
form.AddBinaryData("image_file", image, name, "file/jpg");
public IEnumerator WwwPostRequest(byte[] image,string name,int i)
{ WWWForm form = new WWWForm();
form.AddField("api_key", "*************");
form.AddField("api_secret", "***************");
form.AddField("faceset_token", "***************");
form.AddBinaryData("image_file", image, name, "file/jpg"); WWW w = new WWW("**********************", form);
yield return w;
}
补充:
unity 通过www下载时,通过重载的形式来确定get,post方法(不同post方式也在重载中确定);
public WWW(string url, WWWForm form);//对应post的multipart/form-data方式
public WWW(string url, byte[] postData);//对应application/x-www-form-urlencoded(此方式对应postdata为把传入参数按&符号连接后转化为byte[])和application/json方式(postdata为即把传入参数转换成json格式,在转化为byte[])
[Obsolete("This overload is deprecated. Use UnityEngine.WWW.WWW(string, byte[], System.Collections.Generic.Dictionary<string, string>) instead.")]
public WWW(string url, byte[] postData, Hashtable headers);
public WWW(string url, byte[] postData, Dictionary<string, string> headers);//即通过Dictionary指定post的方式如下:
System.Collections.Hashtable headers = new System.Collections.Hashtable();
headers.Add("Content-Type", "application/x-www-form-urlencoded");//哈希表的数据格式
string data = "username=post&password=6789";
byte[] bs = System.Text.UTF8Encoding.UTF8.GetBytes(data);
WWW www = new WWW("http://127.0.0.1/Test.php", bs, headers);
WWW网络请求的更多相关文章
- Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求
上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...
- Android之三种网络请求解析数据(最佳案例)
AsyncTask解析数据 AsyncTask主要用来更新UI线程,比较耗时的操作可以在AsyncTask中使用. AsyncTask是个抽象类,使用时需要继承这个类,然后调用execute()方法. ...
- IOS开发之—— 在AFN基础上进行的网络请求的封装
网络请求的思路:如果请求成功的话AFN的responseObject就是解析好的. 1发送网络请求:get/post/或者别的 带上URL,需要传的参数 2判断后台网络状态码有没有请求成功: 3 请求 ...
- Android,适合Restful网络请求封装
借助volley.Gson类库. 优点 网络请求集中处理,返回值直接为预期的对象,不需要手动反序列,提高效率,使用时建立好model类即可. 使用效果 DataProess.Request(true, ...
- Android okHttp网络请求之Json解析
前言: 前面两篇文章介绍了基于okHttp的post.get请求,以及文件的上传下载,今天主要介绍一下如何和Json解析一起使用?如何才能提高开发效率? okHttp相关文章地址: Android o ...
- 阶段一:通过网络请求,获得并解析JSON数据(天气应用)
“阶段一”是指我第一次系统地学习Android开发.这主要是对我的学习过程作个记录. 在上一篇阶段一:解析JSON中提到,最近在写一个很简单的天气预报应用.即使功能很简单,但我还是想把它做成一个相对完 ...
- NSURLSession网络请求
个人感觉在网上很难找到很简单的网络请求.或许是我才疏学浅 , 所有就有了下面这一段 , 虽然都是代码 , 但是全有注释 . //1/获取文件访问路径 NSString *path=@"ht ...
- 【Swift】Alamofile网络请求数据更新TableView的坑
写这篇BLOG前,有些话不得不提一下,就仅当发发恼骚吧... 今天下午为了一个Alamofire取得数据而更新TableView的问题,查了一下午的百度(360也是见鬼的一样),竟然没有一个简单明了的 ...
- 【WP8.1】HttpClient网络请求、进度以及终止
工作这么长时间,起初还是喜欢用面向程序过程的思路去写代码. 慢慢的才会用面向对象的思路分析.解决问题.也算是一点点进步吧. 最近在做一个下载音乐的功能.用到了HttpClient类. 于是就简单的写了 ...
- ios htttp网络请求cookie的读取与写入(NSHTTPCookieStorage)
当你访问一个网站时,NSURLRequest都会帮你主动记录下来你访问的站点设置的Cookie,如果 Cookie 存在的话,会把这些信息放在 NSHTTPCookieStorage 容器中共享,当你 ...
随机推荐
- [洛谷日报第39期]比STL还STL?——pbds
[洛谷日报第39期]比STL还STL?——pbds 洛谷科技 发布时间:18-08-3116:37 __gnu_pbds食用教程 引入 某P党:“你们C++的STL库真强(e)大(xin),好多数 ...
- 关于WinForm TreeView的分享~
最近在写个测试demo的时候使用到WinForm TreeView,已经好久没接触了,有些生疏,所以还是记录一下遇到的一些问题. 1.如果动态绑定TreeView,这个功能一般会在数据量不确定,需要去 ...
- Android [启动方式:standard singleTop singleTask singleInstance]
栈顶Activity是当前正在显示的. 以A.B举例 1.standard 不同的Activity都存放在同一个栈中,每次创建实例都会堆放到栈顶,逐次返回直至退出. 创建实例B 创建实例A 点击返回时 ...
- 数据库系统概论——从E-R模型到关系模型
E-R模型和关系模型都是现实世界抽象的逻辑表示 E-R模型并不被 DBMS直接支持,更适合对现实世界建模 关系模型是 DBMS直接支持的数据模型 基本 E-R图中的元素包括实体集.联系集.属性 椭圆框 ...
- Linux上编译安装PHP
这篇文章主要介绍了关于Linux上编译安装PHP,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 之前在服务器上编译安装了PHP运行环境,但是安装完过了一段时间就差不多忘记了,只是零零星 ...
- [Python] 豆瓣电影top250爬虫
1.分析 <li><div class="item">电影信息</div></li> 每个电影信息都是同样的格式,毕竟在服务器端是用 ...
- Patorjk
http://www.patorjk.com/software/taag/#p=display&f=Henry%203D&t=CFR%20SpringBoot%20
- Java 学习笔记之 线程sleep方法
线程sleep方法: 单主线程使用sleep: Main线程差了2000毫秒. public class MainSleepThread extends Thread{ @Override publi ...
- 快学Scala 第一课 (变量,类型,操作符)
Scala 用val定义常量,用var定义变量. 常量重新赋值就会报错. 变量没有问题. 注意:我们不需要给出值或者变量的类型,scala初始化表达式会自己推断出来.当然我们也可以指定类型. 多个值和 ...
- LitePal的基本用法
快速配置 1. 引入Jar包或源码 首先我们需要将LitePal的jar包引入到项目当中,可以点击这里查看LitePal的最新版本,选择你需要的下载即可.下载好了jar包之后,把它复制到项目的li ...