网络请求GET带header

本文详细介绍了Unity中的WebRequest组件如何进行GET、POST、PUT和DELETE等HTTP请求,包括设置header、下载和上传数据,并展示了错误处理和回调机制。适合Unity开发者学习网络通信技术。
摘要由CSDN通过智能技术生成
using System;
using System.Collections;
using System.IO;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using XLua;
using System.Security.Cryptography;
using System.Text;

[LuaCallCSharp]
public class WebRequest : MonoBehaviour
{
    private string url;
    private string fileUrl;
    MD5 hash;
    private void Awake()
    {
        string settingJson = File.ReadAllText(Application.streamingAssetsPath + "/settings.json");
        SettingModel settings = JsonUtility.FromJson<SettingModel>(settingJson);
        fileUrl = settings.file;
        url = "http://" + settings.server + ":" + settings.port;
        hash = MD5.Create();
    }

    public void SendGetRequest(string geturl,Action<string> Handler)
    {
        StartCoroutine(GetRequest(geturl, Handler));
    }

    IEnumerator GetRequest(string geturl,Action<string> Handler)
    {
        yield return new WaitForEndOfFrame();
        using (UnityWebRequest www = UnityWebRequest.Get(url + geturl))
        {
            yield return www.SendWebRequest();
            if(www.isHttpError||www.isNetworkError)
            {
                Debug.Log(url+geturl);
                Debug.Log(www.error);
            }
            else
            {                
                Handler(www.downloadHandler.text);
            }
        }
    }
public void SendGetRequestWithHeader(string geturl, string data, Action<string> Handler)
    {
        StartCoroutine(GetRequestWithHeader(geturl, data, Handler));
    }
    IEnumerator GetRequestWithHeader(string geturl, string header, Action<string> Handler)
    {
        yield return new WaitForEndOfFrame();
        using (UnityWebRequest www = new UnityWebRequest(url + geturl, "GET"))
        {
            byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(header);
            www.uploadHandler = (UploadHandler)new UploadHandlerRaw(postBytes);
            www.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
            www.SetRequestHeader("Authorization", header);
            yield return www.SendWebRequest();
            if (www.isNetworkError || www.isHttpError)
            {
                Debug.Log(www.error);
            }
            else
            {
                Handler(www.downloadHandler.text);
            }
        }

    }
public void SendPostRequest(string posturl,string data,Action<string> Handler)
    {
        StartCoroutine(PostRequest(posturl, data, Handler));
    }
    IEnumerator PostRequest(string posturl,string data,Action<string> Handler)
    {
        yield return new WaitForEndOfFrame();
        using (UnityWebRequest www = UnityWebRequest.Post(url + posturl, data))
        {
            www.uploadHandler = new UploadHandlerRaw(Encoding.UTF8.GetBytes(data));
            www.downloadHandler = new DownloadHandlerBuffer();
            www.SetRequestHeader("Content-Type", "application/json;charset=utf-8");
            yield return www.SendWebRequest();

            Handler(www.downloadHandler.text);
            if (www.isNetworkError || www.isHttpError)
            {
                Debug.Log(url + posturl);
                Debug.Log(www.error);
            }
        }

    }
    public void SendPutRequest(string puturl,string data,Action<string> Handler)
    {
        StartCoroutine(PutRequest(puturl, data, Handler));
    }
    IEnumerator PutRequest(string puturl,string data,Action<string> Handler)
    {
        yield return new WaitForEndOfFrame();
        using(UnityWebRequest www = UnityWebRequest.Put(url + puturl, data))
        {
            www.uploadHandler = new UploadHandlerRaw(Encoding.UTF8.GetBytes(data));
            www.SetRequestHeader("Content-Type", "application/json;charset=utf-8");
            yield return www.SendWebRequest();
            if(www.isNetworkError||www.isHttpError)
            {
                Debug.Log(url + puturl);
                Debug.Log(www.error);
            }
            else
            {                
                Handler("OK");
            }
            
        }
    }
    public void SendDeleteRequest(string deleteurl,string data,Action<string> Handler)
    {
        StartCoroutine(DeleteRequest(deleteurl, data, Handler));
    }
    IEnumerator DeleteRequest(string deleteurl,string data,Action<string> Handler)
    {
        yield return new WaitForEndOfFrame();
        using (UnityWebRequest www = UnityWebRequest.Delete(url + deleteurl))
        {
            www.SetRequestHeader("Content-Type", "application/json;charset=utf-8");
            UploadHandler up = new UploadHandlerRaw(Encoding.UTF8.GetBytes(data));
            www.uploadHandler = up;
            yield return www.SendWebRequest();
            if(www.isHttpError|| www.isNetworkError)
            {
                Debug.Log(url + deleteurl);
                Debug.Log(www.error);
            }
            else
            {
                Handler("OK");
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值