Репликация команды Unix-сокета Curl в Java

Я хочу получить тот же стандарт строки, выводимый curl, когда я набираю что-то вроде:

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

В моем Java-коде. Я понял, что мне нужно использовать AFUNIXSocket, но я могу установить только файл сокета при подключении, поэтому я полагаю, что мне нужно управлять своим HTTP-соединением вручную.

Есть ли способ сделать это проще? Как мне запустить http-соединение через созданный мной сокет?


person Saifer    schedule 29.03.2018    source источник
comment
Вы просмотрели исходный код AFUNIXSocket, который можно найти здесь: github.com/kohlschutter/junixsocket/blob/master/ Думаю, вы получите здесь хороший ответ ....   -  person Rann Lifshitz    schedule 29.03.2018
comment
Я уже видел это, но мне не помогли.   -  person Saifer    schedule 29.03.2018


Ответы (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
person Saifer    schedule 29.03.2018
comment
Я пытаюсь решить ту же загадку с точки зрения Scala (и потоков Akka). По крайней мере, ваш ответ подтверждает, что нужно инкапсулировать заголовки HTTP-запроса, но было бы неплохо каким-то образом использовать HTTP API более высокого уровня в Java. - person Murray Todd Williams; 06.08.2018