一、不带头部的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编码。
版权声明:本文为weixin_39766005原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。