Unity |WWW 带头部的Get请求

23 篇文章 0 订阅

最近的项目需要与服务器传输数据,请求的数据如下(并没有注意到“Header”标识,其实看到也不会多思考)

因为之前也经常用WWW的Get请求,但只限于 public WWW(string url);这个函数的运用,所以没有多加思考便洋洋洒洒写下了下面的代码:

 IEnumerator GetUserInfo(string token)
    {
        WWW getinfo = new WWW("http://192.168.34.145:18082/v1/app/ucenter/user/info?X-Token=" + token);
        yield return getinfo;
        if (getinfo.isDone)
        {
            if (getinfo.error == null)
            {
                Debug.Log("获取到的用户信息:" + getinfo.text);

                loginPage.SetActive(false);
                FirstPage.SetActive(true);
            }
            else
            {
                Debug.Log("获取用户信息 出 错");
            }
        }

    }

运行后结果如下:

“没有带请求头”是什么鬼,网上一查,才知道一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,如下图所示:

  1. 请求行:请求行由方法字段、URL 字段 和HTTP 协议版本字段 3 个部分组成,他们之间使用空格隔开。常用的 HTTP 请求方法有 GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT;
  2. 请求头部:请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息;
  3. 空行:最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头;
  4. 请求包体:请求包体不在 GET 方法中使用,而是在POST 方法中使用。POST 方法适用于需要客户填写表单的场合。与请求包体相关的最常使用的是包体类型 Content-Type 和包体长度 Content-Length。

HTTP 响应报文由状态行、响应头部、空行 和 响应包体 4 个部分组成,如下图所示:

 

具体HTTP工作原理见https://www.cnblogs.com/CodingUniversal/p/7524088.html

继续回到我的项目当中来,了解了头部原理后,代码改为如下所示:

 IEnumerator GetUserInfo(string token)
    {
        Dictionary<string, string> header = new Dictionary<string, string>();
        header.Add("X-Token", token);
        WWW getinfo = new WWW("http://192.168.34.145:18082/v1/app/ucenter/user/info", null, header);
        yield return getinfo;
        if (getinfo.isDone)
        {
            if (getinfo.error == null)
            {
                Debug.Log("获取到的用户信息:" + getinfo.text);

                loginPage.SetActive(false);
                FirstPage.SetActive(true);
            }
            else
            {
                Debug.Log("获取用户信息 出 错");
            }
        }
    }

请求到的数据如下:


扩展知识一、WWW()重载四运用

public WWW(string url, byte[] postData, Dictionary<string, string> headers);

例一:

string requestdata = "username=post&password=6789";
byte[] data= System.Text.UTF8Encoding.UTF8.GetBytes(requestdata);

Dictionary<string, string> header = new Dictionary<string, string>();   
headers.Add("Content-Type", "application/x-www-form-urlencoded");

WWW www = new WWW("http://127.0.0.1/Test.php", data, headers);

例二:

IEnumerator GetUserInfo(string token)
{
        //方法一
        //JsonData data = new JsonData();
        //data["X-Token"] = token;
        //byte[] postBytes = System.Text.Encoding.Default.GetBytes(data.ToJson());

        //方法二
        string requestdata = "X-Token="+token;
        byte[] postBytes = System.Text.UTF8Encoding.UTF8.GetBytes(requestdata);

        Dictionary<string, string> header = new Dictionary<string, string>();
        header.Add("X-Token", token);
        Debug.Log(token);

        WWW getinfo = new WWW("http://192.168.34.145:18082/v1/app/ucenter/user/add_use_count", postBytes, header);
        yield return getinfo;
}

扩展知识二、运用HttpWebRequest 进行带头部的请求

private void GetUserInfo(string token)
{
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://192.168.34.145:18082/v1/app/ucenter/user/info");    //创建一个请求示例 
        request.Headers["X-Token"] = token; 
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();  //获取响应,即发送请求
        Stream responseStream = response.GetResponseStream();
        StreamReader streamReader = new StreamReader(responseStream, System.Text.Encoding.UTF8);
        string str = streamReader.ReadToEnd();
        Debug.Log(str);
}

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烫青菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值