如果我在 Linux shell 中运行这个命令。
curl=`curl --connect-timeout 4 -k -X POST -H "Content-type: text/xml" --data "<MyRequest><HeartBeat timestamp=\"1311157780201\"></HeartBeat></MyRequest>" http://192.168.1.100:8484/rest/service?action=heartbeat 2>&1 | tee`
echo "$curl"
我得到以下回复
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<MyResponse><HeartBeat status="SUCCESS"></HeartBeat></MyResponse>
但是,当在 bash CGI 脚本中执行相同的命令并且输出显示在 html pre 标记中时,我看到一些奇怪的表,并且根本不显示 XML 数据。
在 CGI bash 脚本中我有这个代码
curl=`curl --connect-timeout 4 -k -X POST -H "Content-type: text/xml" --data "<MyRequest><HeartBeat timestamp=\"1311157780201\"></HeartBeat></MyRequest>" http://192.168.1.100:8484/rest/service?action=heartbeat 2>&1 | tee`
echo "<h2> RAW Troubleshooting Data </h2><pre>"
echo "$curl"
echo "</pre>"
exit 0
Web 浏览器中显示的是下表,而不是 XML 数据。
% Total % Received % Xferd Average Speed Time Time Time
Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 76 0 424 --:--:-- --:--:-- --:--:-- 424
202 126 0 126 0 76 302 182 --:--:-- --:--:-- --:--:-- 210
但是,如果我在 cgi bash 脚本中使用带有 -v 命令的 curl 详细信息,我会在 Web 浏览器中执行以下操作,但仍然缺少 XML 响应。
* About to connect() to xx.xx.xx.xx port xxxxx (#0)
* Trying xx.xx.xx.xx... connected
* Connected to xx.xx.xx.xx (xx.xx.xx.xx) port xxxxx (#0)
> POST /rest/service?action=heartbeat HTTP/1.1
> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.15.3 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
> Host: xx.xx.xx.xx:xxxx
> Accept: */*
> Content-type: text/xml
> Content-Length: 76
>
} [data not shown]
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 76 0 422 --:--:-- --:--:-- --:--:-- 422< HTTP/1.1 200 OK
< Server: nginx
< Date: Thu, 14 Nov 2019 18:53:44 GMT
< Content-Type: application/xml
< Transfer-Encoding: chunked
< Connection: keep-alive
< Vary: Accept-Encoding
< X-Powered-By: PHP/7.0.32
<
{ [data not shown]
202 126 0 126 0 76 284 171 --:--:-- --:--:-- --:--:-- 190
202 126 0 126 0 76 284 171 --:--:-- --:--:-- --:--:-- 190* Connection #0 to host xx.xxx.xxx.xx left intact
* Closing connection #0
感谢您的帮助。
答案1
您看到的表格是curl 的有关其正在执行的操作的信息输出。它转到 STDERR。您正在将 STDERR 重定向到 STDOUT ( 2>&1
),所以这就是您看到它的原因。
您需要删除该重定向或通过添加 来静默curl 输出--silent
。至于为什么你没有得到你想要的输出,这并不完全清楚,但| tee
最后看起来是多余的,并且缺少目标文件名,所以不会有帮助。