【问题标题】:Replicate Curl unix-socket command in Java在 Java 中复制 Curl unix-socket 命令
【发布时间】:2018-03-29 08:39:48
【问题描述】:

当我输入类似以下内容时,我希望得到 curl 输出的相同字符串标准:

curl --unix-socket file.sock http://path/to/rest/request

在我的 Java 代码中。 我发现我需要使用 AFUNIXSocket,但我可以只设置连接时的套接字文件,所以我想我必须手动管理我的 http 连接。

有没有办法让它变得更容易?如何通过我创建的套接字启动 http 连接?

【问题讨论】:

标签: java curl unix-socket


【解决方案1】:

所以,我尝试自己管理 http 连接,它可以工作,但我仍在寻找一种更清洁的方法来做到这一点。 我就是这样做的:

AFUNIXSocket s = AFUNIXSocket.newInstance();
AFUNIXSocketAddress sockAdd = new AFUNIXSocketAddress(new File("file.sock"));

s.connect(sockAdd);

BufferedReader bf = new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintWriter pw = new PrintWriter(s.getOutputStream());


pw.write("GET /to/rest/request HTTP/1.1\r\n");

pw.write("Host: path\r\n");
pw.write("Accept:*/*\r\n");
pw.write("\r\n");
pw.flush();
String reply = "";

Thread.sleep(500);
while (bf.ready())
   reply = reply + bf.readLine() + "\n";

这样的 curl 调用也是一样的:

curl --unix-socket file.sock http://path/to/rest/request

【讨论】:

  • 我试图从 Scala(和 Akka 流)的角度来解决同样的难题。至少您的答案验证了需要封装 HTTP 请求标头,但以某种方式利用 Java 中更高级别的 HTTP API 应该会很好。
猜你喜欢
  • 2010-11-05
  • 1970-01-01
  • 2012-01-12
  • 1970-01-01
  • 1970-01-01
  • 2014-01-18
  • 2015-09-12
  • 1970-01-01
  • 2015-11-04
相关资源
最近更新 更多