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 容器中共享,当你 ...
随机推荐
- Spring 梳理-@Controller
@Controller是一个构造性注解(stereotype),它基于@Component 在自动扫描中,组件扫描器会自动将@Controller申明的类注册为Spring应用上下文的一个bean 可 ...
- mapper操作数据的同时返回操作后的值
<insert id="insertSelective" parameterType="com.test.entity.business" keyProp ...
- js 跳转链接的几种方式
1.跳转链接 在当前窗口打开 window.location.href="http://www.baidu.com" 等价于 <a href="baidu.com& ...
- Angular 常用命令行
1. ng -v 查看angular-cli是否安装成功.angular-cli的版本号 2. ng new 项目名称 新建angular项目 3. ng g class 类名 动态生成类文件: 4. ...
- Zookeeper学习笔记之 Zab协议(Zookeeper Atomic Broadcast)
Zab协议(Zookeeper Atomic Broadcast): 广播模式: Leader将所有更新(称为proposal),顺序发送给Follower 当Leader收到半数以上的Followe ...
- Zeppelin 学习笔记之 Zeppelin安装和elasticsearch整合
Zeppelin安装: Apache Zeppelin提供了web版的类似ipython的notebook,用于做数据分析和可视化.背后可以接入不同的数据处理引擎,包括spark, hive, taj ...
- CentOS8 yum/dnf 配置国内源
CentOS8 yum/dnf 配置国内源(临时) CentOS 8更改了软件包的安装程序,取消了 yum 的配置方法,改而使用了dnf 作为安装程序.虽然改变了软件包的安装方式,但是 dnf 还是能 ...
- 【Java】JDK安装及环境变量配置
第一步:下载所需jdk(本次下载Win64位 java1.8...版本) 第二步:点击文件安装,直接下一步到底,成功安装,点击关闭. 第三步:安装完JDK后配置环境变量 计算机→属性→高级系统设置→ ...
- js时间查询补充
先来看下JS中的日期操作: var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年 ...
- 并发新构件之CyclicBarrier
CyclicBarrier:叫做循环栅栏,名字挺好听的.JDK描述:允许一组线程全部等待彼此达到共同屏障点的同步辅助. 循环阻塞在涉及固定大小的线程方的程序中很有用,这些线程必须偶尔等待彼此. 屏障被 ...