Socat fake http server - использовать файл как ответ сервера

Я пытаюсь использовать socat для ответа на каждое подключение к сокету, который он прослушивает, с поддельным HTTP-ответом. Я не могу заставить его работать. Может быть, потому, что я использую cygwin версию socat? Я не знаю.

Частично проблема заключается в том, что я не хочу, чтобы второй аргумент <some_file_response> не записывался. Другими словами, поскольку он двунаправлен, он будет читать то, что в response.txt, а затем записывать в тот же файл, и я не хочу этого. Даже если я делаю open:response.txt,rdonly, он не работает многократно. system:, похоже, ничего не делает. exec кажется, что он работает, например, я могу сделать exec:'cat response.txt', но никогда не отправляется клиенту, подключающемуся к порту 1234.

socat -vv tcp-listen:1234,reuseaddr,fork <some_file_response>

Я хочу, чтобы он читал файл клиенту, который подключался, а затем закрывал соединение, и делал это снова и снова (почему я использовал fork).

Я ставил щедрость на этот вопрос. Пожалуйста, дайте мне решения, которые работают с версией cygwin из командной строки Windows.

Ответ 1

Протестировано с cygwin:

 socat -vv TCP-LISTEN:1234,crlf,reuseaddr,fork SYSTEM:"echo HTTP/1.0 200; echo Content-Type\: text/plain; echo; cat <some_file_response>"

Если вам не нужен полный HTTP-ответ, оставьте эхо:

socat -vv TCP-LISTEN:1234,crlf,reuseaddr,fork SYSTEM:"cat <some_file_response>"

Ответ 2

Взято из socat examples

socat -vv TCP-LISTEN:8000,crlf,reuseaddr,fork SYSTEM:"echo HTTP/1.0 200; echo Content-Type\: text/plain; echo; cat"