请教:通过httpclient方式向doris导入数据出错“no valid Basic authorization”是怎么回事?

通过httpclient方式向doris导入数据出错“no valid Basic authorization”。username使用doris的root账号,password确认密码没错。
核心代码如下:

url = $"{url}{Dbname}/{Table}/_stream_load";
                byte[] postData = Encoding.UTF8.GetBytes(JsonDatas);
                HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
                request.Method = "PUT";
                request.KeepAlive = true;
                request.AllowAutoRedirect = true;
                request.ContentType = "application/json;charset=UTF-8";
                request.UserAgent = "Mozilla/4.0 (compatible;MSIE 6.0;)";
                request.ContentLength = postData.Length;
                request.Timeout = 60000;
                request.Headers.Add("expect", "100-continue");
                request.Headers.Add("format", "json");
                request.Headers.Add("strip_outer_array", "true");
                request.Headers.Add("jsonpaths", jsonpaths);
                request.Headers.Add("label", DealLabe);
                request.PreAuthenticate = true;
                NetworkCredential nc = new NetworkCredential(username, password);
                request.Credentials = nc;

                System.IO.Stream outputStream = request.GetRequestStream();
                outputStream.Write(postData, 0, postData.Length);
                outputStream.Close();

                HttpWebResponse response = request.GetResponse() as HttpWebResponse;
                Stream responseStream = response.GetResponseStream();
                StreamReader reader = new System.IO.StreamReader(responseStream, Encoding.GetEncoding("UTF-8"));
                ResultStr = reader.ReadToEnd();
                reader.Close();

img

老哥,我这边已经解决啦,重定向的时候默认是把密码丢了,你得检测重定向把账户密码放进去

少一个authorization这个参数,是APP吗
authorization这个参数通常使用作为用户标识

有个有意思的现象:同样的代码,url链接改为BE的地址就行了。“no valid Basic authorization”错误是在链接FE的时候出现的,这很奇怪~

doris论坛大佬给出的回复:“可能是没有正确的处理307转发问题”。大佬并未给出明确解决方案。查到如下信息,供大家参考:


所以看起来,在doris官方修复该问题前,可以自己处理一下be节点的选择,例如随机从配置中的N个be节点中选择1个,如果状态正常就发给调用端,如果不正常则重新选择1个。