Bash

bash CGI 腳本中的 curl 命令不顯示 XML 輸出datanotshownd一種噸一種n這噸sH這在ndata not shown

  • November 14, 2019

如果我在 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

感謝您的幫助。

您看到的表格是 curl 關於它在做什麼的資訊輸出。它轉到 STDERR。您正在將 STDERR 重定向到 STDOUT ( 2>&1),這就是您看到它的原因。

您需要通過添加來刪除該重定向或使 curl 輸出靜音--silent。至於為什麼你沒有得到你想要的輸出,這並不完全清楚,但| tee最後看起來是多餘的,並且缺少目標文件名,因此無濟於事。

引用自:https://unix.stackexchange.com/questions/552251