从 rhino 引擎到码头服务器的 HTTP 身份验证

HTTP Authentication to jetty server from rhino engine

我正在尝试建立与由 Jetty 提供支持的 Web 服务器的连接。 代码来自 Rhino 脚本引擎 运行。

连接看起来正常,但我收到此错误,并且当我不输入 "Authorization" header 时,可以在日志文件中获取身份验证失败。添加后,出现以下异常:

 Illegal character(s) in message header value: Basic <base64>

我的密码是:

write2file("Entering doJSON.");
URL = java.net.URL;
HttpURLConnection = java.net.HttpURLConnection;
OutputStream = java.io.OutputStream;
BufferedReader = java.io.BufferedReader;
var url = new URL("http://server-example.com");

Base64 = org.apache.commons.codec.binary.Base64;
var up = username + ":" + password;
var basicAuth = "Basic " + new java.lang.String(Base64.encodeBase64Chunked(getBytes(up)));

write2file("Basic Auth : " + basicAuth);

var conn = url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content", "application/json");
conn.setRequestProperty ("Authorization", basicAuth);

var os = conn.getOutputStream();
os.write(getBytes(data));
os.flush();

write2file("Response code : " + conn.getResponseCode());

if (conn.getResponseCode() != HttpURLConnection.HTTP_CREATED) {
   var br = new BufferedReader(new java.io.InputStreamReader((conn.getErrorStream())));
  var output; var ret;
  while ((output = br.readLine()) != null) {
      ret = ret + output;
  }

   write2file("Response Text : " + ret);
   return -1;
}

var br = new BufferedReader(new java.io.InputStreamReader(
  (conn.getInputStream())));
var output; var reply;
while ((output = br.readLine()) != null) {
   reply = output + reply;
}
write2file(reply);
conn.disconnect();

如果您有任何想法,请不要犹豫。

提前致谢。

我终于明白了。该问题与身份验证无关,但实际上是以下行:

conn.setRequestProperty("Content", "application/json");

这应该是:

conn.setRequestProperty("Content-Type", "application/json");

很容易修复,错误没有指向正确的方向。