Unity | WWW带头部的Post请求 以及 处理base64传输空格的问题

本文详细介绍了在Unity中如何使用WWWForm和byte[]进行POST请求,包括不带头部和带头部的请求方式,以及在传输数据时如何正确处理urlencode编码,避免服务器接收数据时出现错误。

 一、不带头部的Post请求:

WWWForm form = new WWWForm();

form.AddField("app_key", "********");
form.AddField("img", "https://ai.xueersi.com/textRecognition/images/22.jpg");
form.AddField("img_type", "URL");
form.AddField("time_stamp", time_stamp);
form.AddField("nonce_str", "fa577ce340859f9fe");
form.AddField("sign", GetSign());
form.AddField("recog_formula", 1);

WWW www = new WWW("http://openapiai.xueersi.com/v1/api/img/ocr/general", form);

yield return www;

二、带头部的Post请求:

由于需求的变化,所接入的接口需要添加一个字段,与服务器同事沟通后,这个字段以header的方式来进行传递

WWW类带header的构造函数只有一种: public WWW(string url, byte[] postData, Dictionary<string, string> headers);那么我们的字段应该以key1=value1&key2=value2的形式转成byte[]传递。

string requestdata ="version=1.1.0&app_key=********&img=https://ai.xueersi.com/textRecognition/images/22.jpg&img_type=URL&time_stamp=" + time_stamp + "&nonce_str=fa577ce340859f9fe&sign=" + GetSign();

byte[] postBytes = System.Text.UTF8Encoding.UTF8.GetBytes(requestdata);

Dictionary<string, string> header = new Dictionary<string, string>();

header.Add("X-Token", token);

_www = new WWW(CommonData.OCRPrintURL, postBytes, header);

yield return _www;

但是这样请求出现了一个问题,当我以base64编码传递一个图片到服务器时,服务器接收到的base64编码中出现了空格,原因是后台接收到http的数据后会urldecode一次,但我传递的数据没有urlencode,所以我需要在传送base64前把字串中的+先替换为%2B,即进行一下urlencode编码。具体可见文章https://blog.csdn.net/shaukon/article/details/89399266

    public static string UrlEncode(string str)
    {
        //处理加号
        //string newStr=  str.Replace("+", "%2B");
        //return newStr;

        //处理全部
        StringBuilder sb = new StringBuilder();
        byte[] byStr = System.Text.Encoding.UTF8.GetBytes(str);
        for (int i = 0; i < byStr.Length; i++)
        {
            sb.Append(@"%" + Convert.ToString(byStr[i], 16));
        }
        return (sb.ToString());
    }

三、总结:

使用WWWForm表单请求时,底层会默认实现urlencode编码;

使用byte[]进行传输时,需自己实现urlencode编码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

烫青菜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值