GET可行,POST不可行,网上未找到合适的解决UnityWebRequest无法POST FROM问题的答案
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;
using System.Security.Authentication;
using LitJson;
using System;
using System.Globalization;
using System.IO;
using System.Net;
using UnityEngine.Networking;
/// <summary>
/// {"msg":"登录成功!","acc":"c324","data":[{"studentid":"76","studentname":"王二小","relation":"姑姑"},{"studentid":"78","studentname":"王四小","relation":"爷爷"},{"studentid":"77","studentname":"王三小","relation":"爷爷"}],"userid":223,"status":true,"username":"王伟","token":"40c37a25c3322da835ed8e42e3e90361"}
/// </summary>
public class CassHTTP_shitian : MonoBehaviour
{
string acc = "c324";//登录界面时获得,临时定义用于测试
string pwd = "000000";登录界面时获得,临时定义用于测试
static string key = "约定的私钥";
string userid = "223";//login后从返回字段中获得,临时定义用于测试
string studentid = "76";//login后从返回字段中获得,临时定义用于测试
string token;//login后返回的令牌
string start_time;
string end_time;
string train_content;
string app_name;
int score;
string sgl;//login使用的字符串
string trainSgl;//上传训练数据时使用的字符串
string signForLogin;//login sign
string signForTrain;//train data upload sign
void Start()
{
//进入游戏获得
train_content = "近视训练";
app_name = "悦瞳小球";
//login时使用的sign在用户输入完用户名之后获得
string forLoginMD5 = acc + GetExternalIP() + key;//获取原sign拼接字符串
signForLogin = GetMD5(forLoginMD5.Replace("\n", ""));//处理字符串并加密
//拼接Login的get请求
sgl = "acc=" + acc + "&pwd=" + pwd + "&sign=" + signForLogin;
//get 采用Login网址加数据字符串的方式
StartCoroutine(SendGetLogin("http://约定的login url?"+sgl));//可行
//StartCoroutine(Send("约定的login url?"+ sgl));//可行
//StartCoroutine(UploadLoginData());//登陆失败 账号不能为空
//StartCoroutine(UploadTrainInfoData());
}
private void Update()
{
if (Input.GetMouseButtonDown(0))//模拟update监测到的游戏结束时刻
{
//游戏代码中获取start_time end_time后传值
start_time = DateTime.Now.ToString("yyyy-MM-dd' 'HH:mm:ss");//游戏开始获得
end_time = DateTime.Now.ToString("yyyy-MM-dd' 'HH:mm:ss");//游戏结束获得
//游戏结束获得总分数
score = 88888;
//Login成功获得返回值后加密训练数据提交需要使用的字符串并加密
string forMd5TrainSign = userid + studentid + GetExternalIP() + token + key;
signForTrain = GetMD5(forMd5TrainSign.Replace("\n", ""));
trainSgl = "userid=" + userid + "&studentid=" + studentid + "&sign=" + signForTrain +"&start_time="+start_time+ "&end_time="+end_time+"&train_content=" + train_content + "&app_name=" + app_name + "&score=" + score;
string url = "http://www.crchf.com/wifs/train.do?" + trainSgl;
StartCoroutine(SendTrainDataGet(url));
}
}
IEnumerator UploadTrainInfoData()//此post方法连接未成功
{
WWWForm form = new WWWForm();
form.AddField("userid", userid);//
form.AddField("studentid", studentid);//
form.AddField("sign", signForTrain);
form.AddField("start_time", System.DateTime.Now.ToString("YYYY-MM-DD hh:mm:ss"));
form.AddField("end_time", System.DateTime.Now.ToString("YYYY-MM-DD hh:mm:ss"));
form.AddField("train_content", "近视训练");
form.AddField("app_name", "悦瞳小球");
form.AddField("score", 1000);
using (UnityWebRequest www = UnityWebRequest.Post("http://www.crchf.com/wifs/train.do", form))
{
yield return www.SendWebRequest();
if (www.isNetworkError || www.isHttpError)
{
Debug.Log(www.error);
}
else
{
Debug.Log(www.downloadHandler.text);
}
}
}
private string GetMD5(string msg)//MD5加密函数返回加密后字符串
{
byte[] result = ((HashAlgorithm)CryptoConfig.CreateFromName("MD5")).ComputeHash(Encoding.UTF8.GetBytes(msg));
StringBuilder output = new StringBuilder(16);
for (int i = 0; i < result.Length; i++)
{
// convert from hexa-decimal to character
output.Append((result[i]).ToString("x2", System.Globalization.CultureInfo.InvariantCulture));
}
return output.ToString();
}
public string GetExternalIP()//获取客户端external ip
{
return new WebClient().DownloadString("http://icanhazip.com");
}
}