using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public
class C_UnityWebRequest : MonoBehaviour{
static C_UnityWebRequest instance;
public
static C_UnityWebRequest Instance { get {
if (instance == null) { GameObject mounter =
new GameObject(
"C_UnityWebRequest"); instance = mounter.AddComponent<C_UnityWebRequest>(); }
return instance; } }
/* UnityWebRequest uwr = new UnityWebRequest(); uwr.url = "http://www.mysite.com"; uwr.method = UnityWebRequest.kHttpVerbGET; // can be set to any custom method, common constants privided uwr.useHttpContinue = false; uwr.chunkedTransfer = false; uwr.redirectLimit = 0; // disable redirects uwr.timeout = 60; // don't make this small, web requests do take some time */
/// <summary>
/// GET请求
/// </summary>
/// <param name="url"></param>
/// <param name="action"></param>
public void Get(string url, Action<UnityWebRequest> actionResult) { StartCoroutine(_Get(url, actionResult)); }
/// <summary>
/// 下载文件
/// </summary>
/// <param name="url">请求地址</param>
/// <param name="downloadFilePathAndName">储存文件的路径和文件名 like 'Application.persistentDataPath+"/unity3d.html"'</param>
/// <param name="actionResult">请求发起后处理回调结果的委托,处理请求对象</param>
/// <returns></returns>
public void DownloadFile(string url, string downloadFilePathAndName, Action<UnityWebRequest> actionResult) { StartCoroutine(_DownloadFile(url, downloadFilePathAndName, actionResult)); }
/// <summary>
/// 请求图片
/// </summary>
/// <param name="url">图片地址,like 'http://www.my-server.com/image.png '</param>
/// <param name="action">请求发起后处理回调结果的委托,处理请求结果的图片</param>
/// <returns></returns>
public void GetTexture(string url, Action<Texture2D> actionResult) { StartCoroutine(_GetTexture(url, actionResult)); }
/// <summary>
/// 请求AssetBundle
/// </summary>
/// <param name="url">AssetBundle地址,like 'http://www.my-server.com/myData.unity3d'</param>
/// <param name="actionResult">请求发起后处理回调结果的委托,处理请求结果的AssetBundle</param>
/// <returns></returns>
public void GetAssetBundle(string url, Action<AssetBundle> actionResult) { StartCoroutine(_GetAssetBundle(url, actionResult)); }
/// <summary>
/// 请求服务器地址上的音效
/// </summary>
/// <param name="url">没有音效地址,like 'http://myserver.com/mysound.wav'</param>
/// <param name="actionResult">请求发起后处理回调结果的委托,处理请求结果的AudioClip</param>
/// <param name="audioType">音效类型</param>
/// <returns></returns>
public void GetAudioClip(string url, Action<AudioClip> actionResult, AudioType audioType = AudioType.WAV) { StartCoroutine(_GetAudioClip(url, actionResult, audioType)); }
/// <summary>
/// 请求服务器地址上的音效
/// </summary>
/// <param name="url">没有视频地址,like 'http://myserver.com/mymovie.mp3'</param>
/// <param name="actionResult">请求发起后处理回调结果的委托,处理请求结果的MovieTexture</param>
/// <param name="audioType">音效类型</param>
/// <returns></returns>
public void GetMovieTexture(string url, Action<MovieTexture> actionResult) { StartCoroutine(_GetMovieTexture(url, actionResult)); }
/// <summary>
/// 向服务器提交post请求
/// </summary>
/// <param name="serverURL">服务器请求目标地址,like "http://www.my-server.com/myform"</param>
/// <param name="lstformData">form表单参数</param>
/// <param name="lstformData">处理返回结果的委托,处理请求对象</param>
/// <returns></returns>
public void Post(string serverURL, List<IMultipartFormSection> lstformData, Action<UnityWebRequest> actionResult) {
//List<IMultipartFormSection> formData = new List<IMultipartFormSection>();
//formData.Add(new MultipartFormDataSection("field1=foo&field2=bar"));
//formData.Add(new MultipartFormFileSection("my file data", "myfile.txt")); StartCoroutine(_Post(serverURL, lstformData, actionResult)); }
/// <summary>
/// 通过PUT方式将字节流传到服务器
/// </summary>
/// <param name="url">服务器目标地址 like 'http://www.my-server.com/upload' </param>
/// <param name="contentBytes">需要上传的字节流</param>
/// <param name="resultAction">处理返回结果的委托</param>
/// <returns></returns>
public void UploadByPut(string url, byte[] contentBytes, Action<bool> actionResult) { StartCoroutine(_UploadByPut(url, contentBytes, actionResult,
"")); }
/// <summary>
/// GET请求
/// </summary>
/// <param name="url">请求地址,like 'http://www.my-server.com/ '</param>
/// <param name="action">请求发起后处理回调结果的委托</param>
/// <returns></returns> IEnumerator _Get(
string url, Action<UnityWebRequest> actionResult) {
using (UnityWebRequest uwr = UnityWebRequest.Get(url)) { yield
return uwr.SendWebRequest();
if (actionResult != null) { actionResult(uwr); } } }
/// <summary>
/// 下载文件
/// </summary>
/// <param name="url">请求地址</param>
/// <param name="downloadFilePathAndName">储存文件的路径和文件名 like 'Application.persistentDataPath+"/unity3d.html"'</param>
/// <param name="actionResult">请求发起后处理回调结果的委托,处理请求对象</param>
/// <returns></returns> IEnumerator _DownloadFile(
string url,
string downloadFilePathAndName,Action<UnityWebRequest> actionResult) { var uwr =
new UnityWebRequest(url, UnityWebRequest.kHttpVerbGET); uwr.downloadHandler =
new DownloadHandlerFile(downloadFilePathAndName); yield
return uwr.SendWebRequest();
if (actionResult != null) { actionResult(uwr); } }
/// <summary>
/// 请求图片
/// </summary>
/// <param name="url">图片地址,like 'http://www.my-server.com/image.png '</param>
/// <param name="action">请求发起后处理回调结果的委托,处理请求结果的图片</param>
/// <returns></returns> IEnumerator _GetTexture(
string url, Action<Texture2D> actionResult) { UnityWebRequest uwr =
new UnityWebRequest(url); DownloadHandlerTexture downloadTexture =
new DownloadHandlerTexture(
true); uwr.downloadHandler = downloadTexture; yield
return uwr.SendWebRequest(); Texture2D t = null;
if (!(uwr.isNetworkError || uwr.isHttpError)) { t = downloadTexture.texture; }
if (actionResult != null) { actionResult(t); } }
/// <summary>
/// 请求AssetBundle
/// </summary>
/// <param name="url">AssetBundle地址,like 'http://www.my-server.com/myData.unity3d'</param>
/// <param name="actionResult">请求发起后处理回调结果的委托,处理请求结果的AssetBundle</param>
/// <returns></returns> IEnumerator _GetAssetBundle(
string url,Action<AssetBundle> actionResult) { UnityWebRequest www =
new UnityWebRequest(url); DownloadHandlerAssetBundle handler =
new DownloadHandlerAssetBundle(www.url, uint.MaxValue); www.downloadHandler = handler; yield
return www.SendWebRequest(); AssetBundle bundle = null;
if (!(www.isNetworkError || www.isHttpError)) { bundle = handler.assetBundle; }
if (actionResult != null) { actionResult(bundle); } }
/// <summary>
/// 请求服务器地址上的音效
/// </summary>
/// <param name="url">没有音效地址,like 'http://myserver.com/mysound.wav'</param>
/// <param name="actionResult">请求发起后处理回调结果的委托,处理请求结果的AudioClip</param>
/// <param name="audioType">音效类型</param>
/// <returns></returns> IEnumerator _GetAudioClip(
string url,Action<AudioClip> actionResult, AudioType audioType = AudioType.WAV) {
using (var uwr = UnityWebRequestMultimedia.GetAudioClip(url, audioType)) { yield
return uwr.SendWebRequest();
if (!(uwr.isNetworkError || uwr.isHttpError)) {
if (actionResult != null) { actionResult(DownloadHandlerAudioClip.GetContent(uwr)); } } } }
/// <summary>
/// 请求服务器地址上的音效
/// </summary>
/// <param name="url">没有视频地址,like 'http://myserver.com/mymovie.mp3'</param>
/// <param name="actionResult">请求发起后处理回调结果的委托,处理请求结果的MovieTexture</param>
/// <param name="audioType">音效类型</param>
/// <returns></returns> IEnumerator _GetMovieTexture(
string url, Action<MovieTexture> actionResult) {
using (var uwr = UnityWebRequestMultimedia.GetMovieTexture(url)) { yield
return uwr.SendWebRequest();
if (!(uwr.isNetworkError || uwr.isHttpError)) {
if (actionResult != null) { actionResult(DownloadHandlerMovieTexture.GetContent(uwr)); } } } }
/// <summary>
/// 向服务器提交post请求
/// </summary>
/// <param name="serverURL">服务器请求目标地址,like "http://www.my-server.com/myform"</param>
/// <param name="lstformData">form表单参数</param>
/// <param name="lstformData">处理返回结果的委托</param>
/// <returns></returns> IEnumerator _Post(
string serverURL, List<IMultipartFormSection> lstformData, Action<UnityWebRequest> actionResult) {
//List<IMultipartFormSection> formData = new List<IMultipartFormSection>();
//formData.Add(new MultipartFormDataSection("field1=foo&field2=bar"));
//formData.Add(new MultipartFormFileSection("my file data", "myfile.txt")); UnityWebRequest uwr = UnityWebRequest.Post(serverURL, lstformData); yield
return uwr.SendWebRequest();
if (actionResult != null) { actionResult(uwr); } }
/// <summary>
/// 通过PUT方式将字节流传到服务器
/// </summary>
/// <param name="url">服务器目标地址 like 'http://www.my-server.com/upload' </param>
/// <param name="contentBytes">需要上传的字节流</param>
/// <param name="resultAction">处理返回结果的委托</param>
/// <param name="resultAction">设置header文件中的Content-Type属性</param>
/// <returns></returns> IEnumerator _UploadByPut(
string url,byte[] contentBytes, Action<
bool> actionResult,
string contentType=
"application/octet-stream") { UnityWebRequest uwr =
new UnityWebRequest(); UploadHandler uploader =
new UploadHandlerRaw(contentBytes);
// Sends header: "Content-Type: custom/content-type"; uploader.contentType = contentType; uwr.uploadHandler = uploader; yield
return uwr.SendWebRequest();
bool res =
true;
if (uwr.isNetworkError || uwr.isHttpError) { res =
false; }
if (actionResult != null) { actionResult(res); } }}
作者:hh5460
链接:https://www.jianshu.com/p/3da9191f82a0
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。