using Mogafa.Common.HttpClients;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.Networking;
namespace Mogafa.Unity.Common.Networks
{
///
/// UnityWebRequest based HttpClient
///
public class UnityWebRequestHttpClient : HttpClientAbstract
{
///
///
///
///
///
///
public UnityWebRequestHttpClient(string userAgent, List handlers, HttpRequestOptions requestOptions)
: base(userAgent, handlers, requestOptions)
{
}
///
///
///
///
///
///
protected async override Task> RequestInternal(HttpRequest request)
{
var webRequest = new UnityWebRequest(request.Url, request.Method);
webRequest.certificateHandler = new BypassCertificate();
foreach (var header in request.Options.Headers)
{
webRequest.SetRequestHeader(header.Key, header.Value);
}
webRequest.SetRequestHeader("Content-Type", "application/json");
if (!string.IsNullOrEmpty(request.Options.ContentType))
{
webRequest.SetRequestHeader("Content-Type", request.Options.ContentType);
}
if (!string.IsNullOrEmpty(request.Body)&&(request.Method == HttpMethods.Post || request.Method == HttpMethods.Put))
{
byte[] bodyRaw = Encoding.UTF8.GetBytes(request.Body);
webRequest.uploadHandler = new UploadHandlerRaw(bodyRaw);
}
webRequest.downloadHandler = new DownloadHandlerBuffer();
webRequest.timeout = request.Options.Timeout;
//webRequest.SetRequestHeader("User-Agent", "");
await webRequest.SendWebRequest();
var response = new HttpOriginalResponse();
if (webRequest.isNetworkError || webRequest.isHttpError)
{
response.StatusMessage = webRequest.error;
response.StatusCode = (int)webRequest.responseCode;
return response;
}
response.StatusCode = HttpStatusCodes.OK;
var responseText = webRequest.downloadHandler.text;
var data = JsonConvert.DeserializeObject(responseText);
response.Body = data;
return response;
}
}
public static class ExtensionMethods
{
public static TaskAwaiter GetAwaiter(this AsyncOperation asyncOp)
{
var tcs = new TaskCompletionSource