0

我已经测试 crateDB 3.3.4 几个星期了,我一直通过 http 中的 localhost (127.0.0.1) 连接。我已经成功地在本地主机上使用 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;

当我尝试以下代码时,我总是得到“底层连接已关闭:发送时发生意外错误。” 在异常中,我看到“无法将数据写入传输连接:现有连接被远程主机强行关闭”。

知道我在这里做错了什么吗?我以前在本地主机上做过同样的事情,但没有指定凭据,而且效果很好。

4

2 回答 2

1

从您的代码示例中假设您正在使用密码身份验证。永久解决方案确实是使用自动化标头。

如此处所述https://crate.io/docs/crate/reference/en/latest/admin/auth/methods.html#password-authentication-method

于 2019-07-05T10:21:48.717 回答
0

这不是一个永久的解决方案,但出于测试目的,它可以工作。我通过直接在我的 httpwebRequest 中添加授权标头来解决这个问题。

httpWebRequest.Headers.Add(HttpRequestHeader.Authorization, "SomeBasicauthenticationToken");

要找到要通过的身份验证令牌,只需将用户名和密码放在一个基本身份验证令牌生成器中,如下所示: https ://www.blutter.se/utils/basic-authentication-header-generator/

但是如果有人有一个永久的解决方案,我仍然想看看它是什么。

于 2019-07-04T19:42:37.443 回答