Unity商店有一款评分很高的网络通信插件BestHttp。笔者做了一些简单测试。官方地址:https://assetstore.unity.com/packages/tools/network/best-http-2-155981
Demo工程及插件,会在文章末尾提供。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using BestHTTP;
using BestHTTP.Authentication;
using BestHTTP.Cookies;
using System;
using System.Text;
using System.IO;
using Org.BouncyCastle.Crypto.Tls;
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509;
using BestHTTP.Statistics;
using BestHTTP.WebSocket;
using BestHTTP.WebSocket.Frames;
using BestHTTP.SocketIO;
using BestHTTP.SignalR;
/*
* Author:W
* Http协议处理
*/
/// <summary>
/// 实现服务器证书验证接口
/// </summary>
public class CustomVerifier : ICertificateVerifyer
{
public bool IsValid(Uri serverUri, X509CertificateStructure[] certs)
{
// TODO: Return false, if validation fails
return true;
}
}
public delegate void OnServerCallBack(Socket socket, Packet originalPacket, params object[] args);
public class HttpTest : MonoBehaviour {
private HTTPRequest request1;
/// <summary>
/// 大文件流式请求,下载的文件存放到某一个文件目录下
/// </summary>
private HTTPRequest streamReq;
/// <summary>
/// 大文件上传请求
/// </summary>
private HTTPRequest upStreamReq;
/// <summary>
/// 支持服务器主动向客户端推送消息
/// </summary>
private WebSocket webSocket;
/// <summary>
/// SocketIO管理对象
/// </summary>
private SocketManager socketManager;
/// <summary>
/// singalR通信对象
/// </summary>
private Connection singalRConnect;
#region 一般Http请求,TCP连接
/// <summary>
/// Get请求:向特定的资源发出请求。
/// </summary>
/// <param name="url"></param>
public HTTPRequest GetRequest(string url)
{
HTTPRequest request = new HTTPRequest(new Uri(url), OnRequestFinished);
request.Send();
return request;
}
/// <summary>
/// Post请求:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。
/// 数据被包含在请求体中。POST请求可能会导致新的资源的创建或已有资源的修改。
/// </summary>
/// <param name="url"></param>
public HTTPRequest PostRequest(string url,Dictionary<string,string> paramDict = null)
{
HTTPRequest request = new HTTPRequest(new Uri(url),HTTPMethods.Post, OnRequestFinished);
if (paramDict != null && paramDict.Count != 0)
{
foreach (KeyValuePair<string,string> v in paramDict)
{
request.AddField(v.Key, v.Value);
}
}
request.Send();
return request;
}
/// <summary>
/// Head请求:向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。
/// 这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。
/// </summary>
/// <param name="url"></param>
public HTTPRequest HeadPost(string url)
{
HTTPRequest request = new HTTPRequest(new Uri(url),HTTPMethods.Head,OnRequestFinished);
request.Send();
return request;
}
/// <summary>
/// Put请求:向指定资源位置上传其最新内容。
/// </summary>
/// <param name="url"></param>
public HTTPRequest PutRequest(string url)
{
HTTPRequest request = new HTTPRequest(new Uri(url),HTTPMethods.Put,OnRequestFinished);
request.Send();
return request;
}
/// <summary>
/// Delete请求:请求服务器删除 Request-URI 所标识的资源。
/// </summary>
/// <param name="url"></param>
public HTTPRequest DeleteRequest(string url)
{
HTTPRequest request = new HTTPRequest(new Uri(url),HTTPMethods.Delete,OnRequestFinished);
request.Send();
return request;
}
/// <summary>
/// Patch请求:是对 PUT 方法的补充,用来对已知资源进行局部更新 。
/// </summary>
/// <param name="url"></param>
public HTTPRequest PatchRequest(string url)
{
HTTPRequest request = new HTTPRequest(new Uri(url),HTTPMethods.Patch,OnRequestFinished);
request.Send();
return request;
}
private void OnRequestFinished(HTTPRequest request, HTTPResponse response)
{
Debug.Log("Get 请求结果==" + response.DataAsText);
if (response.StatusCode != 401)
{
Debug.Log("校验通过的");
}
else
{
Debug.Log("校验没通过的");
}
}
#endregion
#region 大文件Http请求
private HTTPRequest StreamRequest(string url)
{
HTTPRequest request = new HTTPRequest(new Uri(url), OnStreamRequestFinished);
//开启流式文件请求
request.UseStreaming = true;
request.StreamFragmentSize = 1 * 1024 * 1024;//1M
//关闭缓存,因为已经将请求回来的数据保存到文件中
request.DisableCache = true;
request.Send();
r

1391

被折叠的 条评论
为什么被折叠?



