此方法只能在PC端使用,在移动端无效,若想要解决中文乱码问题,可以把项目升级到5.3以后,并使用Unity自带的UnityWebRequest的Get方法,大致框架如下:
UnityWebRequest webRequest = UnityWebRequest.Get(data);
yield return webRequest.Send();
if (webRequest.error != null)
{
}
else
{
string returnMessage = webRequest.downloadHandler.text;
}
webRequest.Abort();
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
好久没写博客了,最近公司比较忙,今天熬夜解决了一个问题,很有成就感,网上相关资料比较少,所以我打算写下来分享出来。
这个功能是公司的需求,就是要实现中文账号登录的功能,最初的写法就是用的unity自带的www功能,简单几行就可以实现post请求,缺点就是unity自带的www无法实现编码转换。所以是不支持中文账号提交的。实现代码如下:
void Start()刚刚已经说了如果使用上面的方法,如果表单中传入的是中文,那么服务器接收到的是乱码,这个肯定是不行的。那怎么做呢,就是使用C#自带的HttpWebRequest函数。
{
StartCoroutine(DoPost());
}
IEnumerator DoPost()
{
WWWForm form = new WWWForm();
form.AddField("weixinid","admin");
form.AddField("pwd","1234567");
WWW www = new WWW("http://192.168.1.1/EntryformServlet", form);
yield return www;
if (www.error == null)
{
Debug.Log(www.text);
}
else
{
Debug.Log(www.error.ToString());
}
}
废话少数,代码送上。
void Start()
{
Debug.Log(PostWebRequest("http://192.168.1.1/EntryformServlet", "weixinid=测试&pwd=1234567" ));
}
private string PostWebRequest(string postUrl, string paramData)
{
// 把字符串转换为bype数组
byte[] bytes = Encoding.GetEncoding("gb2312").GetBytes(paramData);
HttpWebRequest webReq = (HttpWebRequest) WebRequest.Create(new Uri(postUrl));
webReq.Method = "POST";
webReq.ContentType = "application/x-www-form-urlencoded;charset=gb2312";
webReq.ContentLength = bytes.Length;
using (Stream newStream = webReq.GetRequestStream())
{
newStream.Write(bytes, 0, bytes.Length);
}
using (WebResponse res = webReq.GetResponse())
{
//在这里对接收到的页面内容进行处理
Stream responseStream = res.GetResponseStream();
StreamReader streamReader = new StreamReader(responseStream, Encoding.GetEncoding("UTF-8"));
string str = streamReader.ReadToEnd();
streamReader.Close();
responseStream.Close();
//返回:服务器响应流
return str;
}
}
}
从上面的代码可以看出, POST 中文数据的时候,先使用 UrlEncode 方法将中文字符转换为编码后的 ASCII 码,然后提交到服务器,提交的时候可以说明编码的方式,用来使对方服务器能够正确的解析。