Table of Contents

網路連線範本

透過網路連線範本,您能學習到:

1.透過腳本建立HTTPS GET連線。

2.透過腳本建立HTTPS POST連線。

*目標網域名稱需要申請加入白名單

準備工作

1.匯入範例場景,可以開啟PackageManager的CHTLand SDK,並點選說明頁的Samples頁籤,找到Tutorial Network並點選Import按鈕匯入。

測試流程

1.設定Config面板的Active Template。

2.設定Scene、Assembly Definition等欄位,相關檔案放置於Assets/Samples/CHTLand SDK/x.x.x/TutorialNetwork目錄下。

3.點選Test按鈕。

場景配置

1.進入場景時會自動建立三個連線並使用Debug.Log印出結果,可開啟瀏覽器的開發者面板觀察訊息。三個連線分別是HTTPS GET、POST與POST FORM。

腳本使用

1.取得IValidatedWebRequest網路請求物件

async void Start()
{
    IValidatedWebRequest request = CHTLandProxy.networkRequestManager.GetValidatedWebRequest();

    // 開始HTTP Get請求 (使用async)
    await GetHttpBinDataAsync(request);

    // 開始HTTP Post請求 (使用async)
    await PostHttpBinDataAsync(request);
    
    // 開始HTTP Post Form請求 (使用async)
    await PostFormDataAsync(request);
}

2.建立HTTPS GET連線

// 使用UnityWebRequest從httpbin.org獲取數據 (async Task版本)
private async Task GetHttpBinDataAsync(IValidatedWebRequest validatedRequest)
{
    string url = "https://httpbin.org/get";
    Debug.Log("開始GET請求: " + url);

    // 使用ValidatedWebRequest獲取UnityWebRequest物件
    UnityWebRequest webRequest = validatedRequest.Get(url);

    if (webRequest == null)
    {
        Debug.LogError("無法創建GET請求,URL可能不在允許的域名清單中或使用了非HTTPS協議");
        return;
    }

    // 發送請求 (使用async/await替代yield return)
    var operation = webRequest.SendWebRequest();

    // 等待請求完成
    while (!operation.isDone)
    {
        await Task.Yield();
    }

    // 檢查是否有錯誤
    if (webRequest.result != UnityWebRequest.Result.Success)
    {
        Debug.LogError("網絡請求錯誤: " + webRequest.error);
    }
    else
    {
        // 獲取並打印JSON響應
        string jsonResult = webRequest.downloadHandler.text;
        Debug.Log("GET請求成功! 收到的JSON響應 (async方式):");
        Debug.Log(jsonResult);

        // 可以進一步解析JSON數據
        // var resultData = JsonUtility.FromJson<YourDataType>(jsonResult);
    }

    // 釋放資源
    webRequest.Dispose();
}

3.建立HTTPS POST連線

// 使用UnityWebRequest向httpbin.org發送Post數據 (async Task版本)
private async Task PostHttpBinDataAsync(IValidatedWebRequest validatedRequest)
{
    string url = "https://httpbin.org/post";
    Debug.Log("開始POST請求: " + url);

    // 創建POST請求的數據
    var postData = new Dictionary<string, string>
    {
        { "name", "TestUser" },
        { "message", "Hello from CHTLand App" }
    };
    string jsonData = JsonUtility.ToJson(new SerializableDict(postData));

    // 使用ValidatedWebRequest獲取UnityWebRequest物件
    UnityWebRequest webRequest = validatedRequest.Post(url, jsonData, "application/json");

    if (webRequest == null)
    {
        Debug.LogError("無法創建Post請求,URL可能不在允許的域名清單中或使用了非HTTPS協議");
        return;
    }

    // 發送請求
    var operation = webRequest.SendWebRequest();

    // 等待請求完成
    while (!operation.isDone)
    {
        await Task.Yield();
    }

    // 檢查是否有錯誤
    if (webRequest.result != UnityWebRequest.Result.Success)
    {
        Debug.LogError("POST請求錯誤: " + webRequest.error);
    }
    else
    {
        // 獲取並打印JSON響應
        string jsonResult = webRequest.downloadHandler.text;
        Debug.Log("POST請求成功! 收到的JSON響應:");
        Debug.Log(jsonResult);
    }

    // 釋放資源
    webRequest.Dispose();
}

4.建立HTTPS POST連線,並使用FORM傳送資料

// 使用UnityWebRequest向httpbin.org發送FormData (async Task版本)
private async Task PostFormDataAsync(IValidatedWebRequest validatedRequest)
{
    string url = "https://httpbin.org/post";
    Debug.Log("開始POST Form請求: " + url);

    // 創建表單資料
    WWWForm formData = new WWWForm();
    formData.AddField("username", "TestUser");
    formData.AddField("email", "test@example.com");
    formData.AddField("message", "Hello from CHTLand App using form data!");

    // 使用ValidatedWebRequest獲取UnityWebRequest物件
    UnityWebRequest webRequest = validatedRequest.Post(url, formData);

    if (webRequest == null)
    {
        Debug.LogError("無法創建Post Form請求,URL可能不在允許的域名清單中或使用了非HTTPS協議");
        return;
    }

    // 發送請求
    var operation = webRequest.SendWebRequest();

    // 等待請求完成
    while (!operation.isDone)
    {
        await Task.Yield();
    }

    // 檢查是否有錯誤
    if (webRequest.result != UnityWebRequest.Result.Success)
    {
        Debug.LogError("POST Form請求錯誤: " + webRequest.error);
    }
    else
    {
        // 獲取並打印JSON響應
        string jsonResult = webRequest.downloadHandler.text;
        Debug.Log("POST Form請求成功! 收到的JSON響應:");
        Debug.Log(jsonResult);
    }

    // 釋放資源
    webRequest.Dispose();
}