【发布时间】:2016-10-17 08:34:28
【问题描述】:
我正在尝试仅使用 Windows 批处理脚本设置 Web 服务器。
我已经想出了以下脚本:
@echo off
@setlocal enabledelayedexpansion
for /l %%a in (1,0,2) do (
type tempfile.txt | nc -w 1 -l -p 80 | findstr mystring
if !ERRORLEVEL! == 0 (
echo found > tempfile.txt
) else (
echo not-found > tempfile.txt
)
)
但是,响应总是落后一个请求,我的意思是,如果我在浏览器中输入这样的内容:
REQUEST: localhost/mystring
我会得到以下回复:
RESPONSE: not-found
只有在下一个请求中,我才会收到上述请求的正确答案。
发生这种情况是因为一旦 netcat 收到请求,它就会以尚未根据请求更新的 tempfile.txt 的当前内容进行响应。
有什么方法可以阻止响应直到 tempfile.txt 更新或任何其他实现预期结果的方法?
【问题讨论】:
-
你正在用字符串“found”或“not-found”覆盖
tempfile.txt的内容;你的代码根本不应该工作。 -
@SomethingDark 我相信这是故意的。这些不打算成为日志。它们旨在包含 HTTP 内容。 OP 要求的是如何根据浏览器的请求标头内容使
ncTCP 输出有条件。 -
@rojo - 他正在覆盖他正在通过管道传输到 netcat 的文件。 Netcat 应该会左右吐错误。
-
@SomethingDark Netcat 执行在
findstr执行时已完成。在下一次循环迭代之前,Netcat 不太关心tempfile.txt会发生什么。 -
在第一次迭代之后,tempfile.txt 将只包含字符串“found”或“not found”。我不明白脚本是如何多次成功运行的。
标签: windows batch-file webserver named-pipes netcat