我已经测试了crateDB 3.3.4几周了,并且我一直通过http中的localhost(127.0.0.1)进行连接。我已经在localhost上成功使用HttpEndpoint批量导入数据。
我现在正在使用https在云集群上进行测试。我设法打开Chrome并在服务器上登录,但是我无法通过HttpEndpoint在C#中进行远程管理。
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("https://remoteServerUrl:4200/_sql");
httpWebRequest.Method = "POST";
httpWebRequest.Credentials = new NetworkCredential("username", "password");
httpWebRequest.Timeout = 600000;
httpWebRequest.ContentType = "application/json";
using(var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
streamWriter.Write(request);
streamWriter.Flush();
}
HttpWebResponse response = (HttpWebResponse)httpWebRequest.GetResponse();
success = response.StatusCode == HttpStatusCode.OK;
当我尝试以下代码时,总是得到“底层连接已关闭:发送中发生意外错误”。并且例外,我看到“无法将数据写入传输连接:远程主机强行关闭了现有连接。”
任何主意,我在这里做错了什么?之前,我在本地主机上做过同样的事情,但是没有指定凭据,而且效果很好。
答案 0 :(得分:1)
从代码示例中假设您正在使用密码身份验证。永久解决方案的确将使用autorization标头。
所述答案 1 :(得分:0)
这不是永久的解决方案,但出于测试目的,它可以工作。我通过直接在httpwebRequest中添加Authorization Header解决此问题。
f0 = 6
f1 = 1
k = 2
ft = 0.3
gfc = function(fc) {
ft - ((f0 - fc) / k) + ((f1 / k) * log((fc - f1) / (f0 - f1)))
}
uniroot(gfc, interval = c(f0, f1))
#> $root
#> [1] 5.504386
#>
#> $f.root
#> [1] 6.72753e-09
#>
#> $iter
#> [1] 5
#>
#> $init.it
#> [1] NA
#>
#> $estim.prec
#> [1] 6.103516e-05
要找到要传递的身份验证令牌,只需将用户名和密码放在基本的身份验证令牌生成器中,如下所示: https://www.blitter.se/utils/basic-authentication-header-generator/
但是,如果有人有永久解决方案,我仍然想看看它是什么。