Bash CGI 스크립트의 Curl 명령에 XML 출력이 표시되지 않습니다. [데이터가 표시되지 않음]

Bash CGI 스크립트의 Curl 명령에 XML 출력이 표시되지 않습니다. [데이터가 표시되지 않음]

Linux 셸에서 이 명령을 실행하면

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

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 명령과 함께 컬 세부 정보를 사용하는 경우 웹 브라우저에서 다음을 수행하지만 여전히 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

당신이 보는 테이블은 그것이 무엇을 하고 있는지에 대한 컬의 정보 출력입니다. STDERR로 이동합니다. STDERR을 STDOUT()으로 리디렉션하고 있으므로 2>&1이를 보고 있는 것입니다.

를 추가하여 해당 리디렉션을 제거하거나 컬 출력을 침묵시켜야 합니다 --silent. 원하는 출력을 얻지 못하는 이유는 완전히 명확하지 않지만 | tee결국 중복된 것처럼 보이고 대상 파일 이름이 누락되어 도움이 되지 않습니다.

관련 정보