using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
/// <summary>
/// 網絡請求測試
/// </summary>
public class ChinarWebRequest : MonoBehaviour
{
void Start()
{
StartCoroutine(SendRequest());
}
/// <summary>
/// 開啟一個協程,發送請求
/// </summary>
/// <returns></returns>
IEnumerator SendRequest()
{
Uri uri = new Uri("http://www.baidu.com"); //Uri 是 System 命名空間下的一個類,注意引用該命名空間
UnityWebRequest uwr = new UnityWebRequest(uri); //創建UnityWebRequest對象
uwr.timeout = 5;
yield return uwr.SendWebRequest(); //等待返回請求的信息
if (uwr.isHttpError || uwr.isNetworkError) //如果其 請求失敗,或是 網絡錯誤
{
Debug.LogError(uwr.error); //打印錯誤原因
}
else //請求成功
{
Debug.Log("請求成功");
}
}
}
Get方法
Get 方法為創建一個http為傳入url的 UnityWebReqest 對象
using System;
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
/// <summary>
/// 網絡請求測試
/// </summary>
public class ChinarWebRequest : MonoBehaviour
{
void Start()
{
StartCoroutine(SendRequest());
}
/// <summary>
/// 開啟一個協程,發送請求
/// </summary>
/// <returns></returns>
IEnumerator SendRequest()
{
UnityWebRequest uwr = UnityWebRequest.Get("http://www.baidu.com"); //創建UnityWebRequest對象
yield return uwr.SendWebRequest(); //等待返回請求的信息
if (uwr.isHttpError || uwr.isNetworkError) //如果其 請求失敗,或是 網絡錯誤
{
Debug.Log(uwr.error); //打印錯誤原因
}
else //請求成功
{
Debug.Log("Get:請求成功");
Debug.Log(uwr.downloadedBytes);
}
}
}
Post方法
Post方法將一個表上傳到遠程的服務器,一般來說我們登陸某個網站的時候會用到這個方法,我們的賬號密碼會以一個表單的形式傳過去
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
/// <summary>
/// 網絡請求測試
/// </summary>
public class ChinarWebRequest : MonoBehaviour
{
void Start()
{
StartCoroutine(Post());
}
/// <summary>
/// 開啟一個協程,發送請求
/// </summary>
/// <returns></returns>
IEnumerator Post()
{
WWWForm form = new WWWForm();
//鍵值對
form.AddField("key", "value");
form.AddField("name", "Chinar");
//請求鏈接,並將form對象發送到遠程服務器
UnityWebRequest webRequest = UnityWebRequest.Post("http://www.baidu.com", form);
yield return webRequest.SendWebRequest();
if (webRequest.isHttpError || webRequest.isNetworkError)
{
Debug.Log(webRequest.error);
}
else
{
Debug.Log("發送成功");
}
}
}
Put方法
Put方法將數據發送到遠程的服務器
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
/// <summary>
/// 網絡請求測試
/// </summary>
public class ChinarWebRequest : MonoBehaviour
{
void Start()
{
StartCoroutine(Upload());
}
/// <summary>
/// 開啟協程
/// </summary>
/// <returns></returns>
IEnumerator Upload()
{
byte[] myData = System.Text.Encoding.UTF8.GetBytes("執著的測試數據");
using (UnityWebRequest uwr = UnityWebRequest.Put("http://www.baidu.com", myData))
{
yield return uwr.SendWebRequest();
if (uwr.isNetworkError || uwr.isHttpError)
{
Debug.Log(uwr.error);
}
else
{
Debug.Log("上傳成功!");
}
}
}
}
Head方法
Head方法與Get方法用法一致,都是傳入一個Url
/// 開啟一個協程,發送請求
/// </summary>
/// <returns></returns>
IEnumerator SendRequest1()
{
UnityWebRequest uwr = UnityWebRequest.Head("http://www.chinar.xin/chinarweb/WebRequest/Get/00-效果.mp4"); //創建UnityWebRequest對象
yield return uwr.SendWebRequest(); //等待返回請求的信息
if (uwr.isHttpError || uwr.isNetworkError) //如果其 請求失敗,或是 網絡錯誤
{
Debug.Log(uwr.error); //打印錯誤原因
}
else //請求成功
{
Debug.Log("Head:請求成功");
}
}
GetResponseHeader方法
GetResponseHeader方法可以用來獲取請求文件的長度 字符串,表示獲取文件內容長度。
/// 開啟一個協程,發送請求
/// </summary>
/// <returns></returns>
IEnumerator SendRequest1()
{
UnityWebRequest uwr = UnityWebRequest.Head("http://www.chinar.xin/chinarweb/WebRequest/Get/00-效果.mp4"); //創建UnityWebRequest對象
yield return uwr.SendWebRequest(); //等待返回請求的信息
if (uwr.isHttpError || uwr.isNetworkError) //如果其 請求失敗,或是 網絡錯誤
{
Debug.Log(uwr.error); //打印錯誤原因
}
else //請求成功
{
long totalLength = long.Parse(huwr.GetResponseHeader("Content-Length")); //首先拿到文件的全部長度
Debug.Log("totalLength");//打印文件長度
}
}
下載文件
using System;
using System.Collections;
using System.IO;
using UnityEditor;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
public class ChinarDownLoadFile : MonoBehaviour
{
public Slider ProgressBar; //進度條
public Text SliderValue; //滑動條值
private Button startBtn; //開始按鈕
void Start()
{
//初始化進度條和文本框
ProgressBar.value = 0;
SliderValue.text = "0.0%";
startBtn = GameObject.Find("Start Button").GetComponent<Button>();
startBtn.onClick.AddListener(OnClickStartDownload);
}
/// <summary>
/// 回調函數:開始下載
/// </summary>
public void OnClickStartDownload()
{
StartCoroutine(DownloadFile());
}
/// <summary>
/// 協程:下載文件
/// </summary>
IEnumerator DownloadFile()
{
UnityWebRequest uwr = UnityWebRequest.Get("http://www.linxinfa.test.mp4.mp4"); //創建UnityWebRequest對象,將Url傳入
uwr.SendWebRequest(); //開始請求
if (uwr.isNetworkError || uwr.isHttpError) //如果出錯
{
Debug.Log(uwr.error); //輸出 錯誤信息
}
else
{
while (!uwr.isDone) //只要下載沒有完成,一直執行此循環
{
ProgressBar.value = uwr.downloadProgress; //展示下載進度
SliderValue.text = Math.Floor(uwr.downloadProgress * 100) + "%";
yield return 0;
}
if (uwr.isDone) //如果下載完成了
{
print("完成");
ProgressBar.value = 1; //改變Slider的值
SliderValue.text = 100 + "%";
}
byte[] results = uwr.downloadHandler.data;
// 注意真機上要用Application.persistentDataPath
CreateFile(Application.streamingAssetsPath + "/MP4/test.mp4", results, uwr.downloadHandler.data.Length);
AssetDatabase.Refresh(); //刷新一下
}
}
/// <summary>
/// 這是一個創建文件的方法
/// </summary>
/// <param name="path">保存文件的路徑</param>
/// <param name="bytes">文件的字節數組</param>
/// <param name="length">數據長度</param>
void CreateFile(string path, byte[] bytes, int length)
{
Stream sw;
FileInfo file = new FileInfo(path);
if (!file.Exists)
{
sw = file.Create();
}
else
{
return;
}
sw.Write(bytes, 0, length);
sw.Close();
sw.Dispose();
}
}