UnityWebRequest使用總結


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();
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM