使用curl执行Select查询失败,请求排查语法/选项错误
问题分析与解决方案
你的curl命令执行失败,核心原因是shell解析了URL里的特殊字符,具体是&和空格触发了shell的默认行为:
- URL中的
&在bash类shell里是特殊符号,代表把前面的命令放到后台执行。所以你的命令被shell硬生生拆成了三个独立部分:curl -o /dev/null -s -w %{time_total} http://localhost:8080/getquery?db=EmpDt(被后台执行)col=HRDt(也被当作后台任务执行)query=select * from emp where id=1111(这里的空格又让shell拆分参数,直接导致语法错误)
这就是你看到[1] 2784 [2] 2785这些后台进程编号,以及后续"invalid option or syntax"报错的根源。
修正后的命令
只需要把整个URL用单引号括起来,让shell把它当作一个完整的字面量参数传递给curl就行:
curl -o /dev/null -s -w %{time_total} 'http://localhost:8080/getquery?db=EmpDt&col=HRDt&query=select * from emp where id=1111'
如果想更符合URL规范,也可以把URL里的空格手动编码为%20(curl其实会自动处理带空格的参数,但编码后兼容性更好):
curl -o /dev/null -s -w %{time_total} 'http://localhost:8080/getquery?db=EmpDt&col=HRDt&query=select%20*%20from%20emp%20where%20id=1111'
为什么这样有效?
单引号在shell里会完全禁用特殊字符的解析——不管是&、空格还是通配符,都会被当作普通字符处理。这样curl就能收到完整的、未被拆分的URL,自然能正确发送请求了。
内容的提问来源于stack exchange,提问作者Eupheus
相关产品推荐
相关产品推荐

