http://blog.csdn.net/chenggong2dm/article/details/17372203

写在前面:

WWW类,是unity里,简单的访问网页的类。本文介绍的就是这种方式,与web服务器之间进行通信。当然,HTTP通信,也可以自己通过socket去写,自己实现一个http通信。

WWW类可以用来发送GET和POST请求到服务器,WWW类默认使用GET方法,并且如果提供一个postData参数可用POST方法。这里我们主要使用实用性更强一些的POST方式。

WWW的完整构造函数如下:

WWWurl:string, postData:byte[], headers:Hashtable )

  • url
    The url to download.
  • postData
    A byte array of data to be posted to the url.
  • headers
    A hash table of custom headers to send with the request.

■注意:这个构造函数,有函数重载,可以省略第三个headers参数,也就是:

WWWurl:string, postData:byte[] )

实际例子:

1,新建一个空项目。【File】-->【New Project】

2,新建一个2D背景,用于衬托UI。【GameObject】-->【CreateOther】-->【GUI Texture】

3,写HttpTest.cs脚本文件,绑定到摄像机上。代码如下:

[csharp] view
plain
copy

  1. using UnityEngine;
  2. using System.Collections;
  3. public class HttpTest : MonoBehaviour {
  4. //variables
  5. public string str_uid = "";
  6. public string str_score = "";
  7. public string str_response = "";
  8. // Use this for initialization
  9. void Start () {
  10. }
  11. // Update is called once per frame
  12. void Update () {
  13. }
  14. //在C#中, 需要用到yield的话, 必须建立在IEnumerator类中执行
  15. IEnumerator TestPost()
  16. {
  17. //WWW的三个参数: url, postData, headers
  18. string url = "http://127.0.0.1/test/";
  19. byte[] post_data;
  20. Hashtable headers;   //System.Collections.Hashtable
  21. string str_params;
  22. str_params = "uid=" + str_uid + "&" + "score=" + str_score;
  23. post_data = System.Text.UTF8Encoding.UTF8.GetBytes(str_params);
  24. //Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
  25. //byte[] post_data = encode.GetBytes("uid=中文&score=100");
  26. headers = new Hashtable();
  27. //headers.Add("Content-Type","application/x-www-form-urlencoded");
  28. headers.Add("CONTENT_TYPE", "text/plain");
  29. //发送请求
  30. WWW www_instance = new WWW(url, post_data, headers);
  31. //web服务器返回
  32. yield return www_instance;
  33. if (www_instance.error != null)
  34. {
  35. Debug.Log(www_instance.error);
  36. }
  37. else
  38. {
  39. this.str_response = www_instance.text;
  40. }
  41. }
  42. void OnGUI () {
  43. GUI.Label(new Rect(10,20,60,20),"UID:   ");
  44. GUI.Label(new Rect(10,45,60,20),"Score: ");
  45. //注意:因为每一帧都在刷, 所以[文本框]是这种写法:
  46. str_uid = GUI.TextField(new Rect(60, 20, 160, 20), str_uid);
  47. str_score = GUI.TextField(new Rect(60, 45, 160, 20), str_score);
  48. //发送Http的POST请求
  49. if (GUI.Button(new Rect(120,80,100,25),"发送请求"))
  50. {
  51. StartCoroutine(TestPost());
  52. }
  53. this.str_response = GUI.TextArea(new Rect(10, 150, 210, 100), this.str_response);
  54. }
  55. }


4,运行。效果如下:

5,点击,发送POST请求,并显示服务器返回的结果:

附注A:

下面是对应的web服务器端代码:

本例的web服务器,使用的是python的django,使用方法可以参加我上一篇文章:【新版django1.6的Hello world】

views代码如下:

[python] view
plain
copy

  1. #! /usr/bin/env python
  2. #coding=utf-8
  3. from django.http import HttpResponse
  4. def test_post(request):
  5. fanhui = u'服务器返回:\n' + u'用户UI:'+ unicode(request.POST['uid']) +'\n'
  6. fanhui = fanhui + u'分数:'+ unicode(request.POST['score'])
  7. return HttpResponse(fanhui)

附注B:

如果使用django,注意要把中间件里的:

'django.middleware.csrf.CsrfViewMiddleware',        注释掉。否则请求会因为CSRF机制,给拦下,报403错误。

或者干脆禁用中间件,也行。

Unity的http通信--unity与python的django通信的更多相关文章

  1. [Unity][Heap sort]用Unity动态演示堆排序的过程(How Heap Sort Works)

    [Unity][Heap sort]用Unity动态演示堆排序的过程 How Heap Sort Works 最近做了一个用Unity3D动态演示堆排序过程的程序. I've made this ap ...

  2. Unity编程标准导引-Unity中的基本概念-2.1界面概览

    Unity中的基本概念 本文我们介绍Unity中的基本概念,包括:场景.游戏对象.组件.预制件.资源等. 2.1.界面概览 打开Unity之后,我们大概可以看到以上画面,以上画面中即显示了我们最常用到 ...

  3. Unity与Android交互-Unity接入高德地图实现定位以及搜索周边的功能(使用Android Studio)详细操作

    刚进公司给安排的任务就是Unity接入高德地图,算是踩了不少坑总算做出来了,抽点时间写个博客记录一下 废话不多说 先上效果图 获取定位并根据手机朝向显示周边信息            使用的Unity ...

  4. unity中调试模型时unity崩溃问题

    这个问题是在我调试3D模型资源时出现的,每当在Scene场景中调试模型时unity崩溃,出现Unity Bug Reporter页面,反复出现这个问题,很烧脑 对于这个问题我表示很无语,但是经过不断查 ...

  5. [IoC容器Unity]第一回:Unity预览

    1.引言 高内聚,低耦合成为一个OO架构设计的一个参考标准.高内聚是一个模块或者一个类中成员跟这个模块或者类的关系尽量高,低耦合是不同模块或者不同类之间关系尽量简单. 拿咱国家举例来说,假如你是中国人 ...

  6. C#开发Unity游戏教程之Unity中方法的参数

    C#开发Unity游戏教程之Unity中方法的参数 Unity的方法的参数 出现在脚本中的方法,无论是在定义的时候,还是使用的时候,后面都跟着一对括号“( )”,有意义吗?看起来最多也就是起个快速识别 ...

  7. Python设计模式 - UML - 通信图(Communication Diagram)

    简介 通信图表示对象之间的消息往来,是表述时序图中信息交互的另一种UML图,介绍完时序图就要对照学习一下通信图,二者是一体两面的. 通信图和时序图可以相互转换,二者的侧重点不同,通信图侧重哪些对象发送 ...

  8. [Python] 利用Django进行Web开发系列(一)

    1 写在前面 在没有接触互联网这个行业的时候,我就一直很好奇网站是怎么构建的.现在虽然从事互联网相关的工作,但是也一直没有接触过Web开发之类的东西,但是兴趣终归还是要有的,而且是需要自己动手去实践的 ...

  9. [Python] 利用Django进行Web开发系列(二)

    1 编写第一个静态页面——Hello world页面 在上一篇博客<[Python] 利用Django进行Web开发系列(一)>中,我们创建了自己的目录mysite. Step1:创建视图 ...

随机推荐

  1. 推荐一套免费跨平台的delphi 哈希及加密算法库

    delphi 目前提供了部分哈希及加密算法. 但是不是特别全,今天给大家推荐一套免费的.跨平台的算法库. https://github.com/winkelsdorf/DelphiEncryption ...

  2. EasyCamera Android安卓移动视频监控单兵设备接入EasyDarwin开源流媒体云平台

    前言 随着Android系统的不断更新和发展,现在越来越多的硬件产品选择用安卓系统作为运行环境,电视机,机顶盒.门禁.行车记录仪.车载系统.单兵设备等等,Android系统底层还是Linux,但对上层 ...

  3. Easyui datagrid 怎么添加操作按钮,rowStyler

    说明:本篇文章主要是展示怎么设置easyUI datagrid的格式,包括行样式和列样式,以及添加操作按钮列 开发环境 vs2012  asp.net mvc4 c# 1.效果图 3.HTML代码 & ...

  4. 2018.11.06 生成器函数进阶&列表推导式&生成器表达式

    1.生成器函数进阶 2.列表推导式 3.生成器表达式

  5. aop学习总结一------使用jdk动态代理简单实现aop功能

    aop学习总结一------使用jdk动态代理实现aop功能 动态代理:不需要为目标对象编写静态代理类,通过第三方或jdk框架动态生成代理对象的字节码 Jdk动态代理(proxy):目标对象必须实现接 ...

  6. [IR课程笔记]向量空间模型(Vector Space Model)

    VSM思想 把文档表示成R|v|上的向量,从而可以计算文档与文档之间的相似度(根据欧氏距离或者余弦夹角) 那么,如何将文档将文档表示为向量呢? 首先,需要选取基向量/dimensions,基向量须是线 ...

  7. (C)struct结构体指针

    结构体指针 指针结构与指针的关系亦有两重:其一是在定义结构时,将指针作为结构中的一个成员:其二是指向结构的指针(称为结构指针). 前者同一般的结构成员一样可直接进行访问,后者是本节讨论的重点. 结构指 ...

  8. eclipse配置SVN

    1.设置 maven 工程svn忽略target 最新maven写法忽略的文件,还需忽略target.*/logs. Windows -> Preferences -> Team -> ...

  9. window上安装rabbitMQ

    win7下安装RabbitMQ http://my.oschina.net/ydsakyclguozi/blog/528835?fromerr=q7m1OxxF 前辈总结的特别详细.

  10. 解决Android Studio Fetching Android SDK component information失败问题【转】

    本文转载自:http://blog.csdn.net/isesar/article/details/41908089 Android Studio 安装完成后,如果直接启动,Android Studi ...