【问题标题】:curl not getting response when run from script从脚本运行时 curl 没有得到响应
【发布时间】:2015-05-22 09:43:26
【问题描述】:

我有简单的 bash 脚本包装 curl 以便从文件中读取消息和标题,然后构建 curl 命令,执行它并读取响应。

脚本还会打印出正在运行的完整命令。当我直接从 shell 运行这个打印的命令时,我得到了预期的响应,但是当它在脚本中运行时,响应是空的。

在脚本内运行时 curl 是否有任何秘密行为变化?

生成的命令:

curl -s -H 'Content-Type: application/soap+xml;charset=UTF-8;action="http://soap.xxxxxx/yyyyy/zzzzz"' --data-ascii '<soap:Envelope xmlns:soap (...) full message xml</soap:Envelope>' http://xx.xx.xx.xx:yyyy/yyyyy/zzzzz

脚本 sn-p

cmdline='curl -s '
if [[ -n $header ]]
then
  cmdline="$cmdline -H '$header'"
fi
if [[ -n $message ]]
then
  cmdline=$cmdline" --data-ascii '"$message"'"
fi

cmdline="$cmdline $target"

echo $cmdline

response=$($cmdline)

echo response:
echo $response
echo EOF

我尝试使用 --output 开关将响应重定向到文件,但没有生成文件。就像我说的 - 从 shell 工作,脚本没有响应

【问题讨论】:

  • 您可以通过在您想查看脚本正在做什么的部分中包含set -xv 来调试您的脚本。它比使用echo 命令更可靠。
  • 这很有帮助。 Bash 已经从这个信封中逃脱了垃圾,所以难怪它不起作用。我想我的解决方法并不像我想象的那样丑陋。

标签: bash shell curl soap


【解决方案1】:

我仍然不知道为什么原始脚本不起作用,但我找到了解决方法。我仍然生成 curl 命令,但我没有运行它,而是将它转储到文件中,然后运行这个文件。

tmpscr=/tmp/runws_$(date +%s).sh
echo $cmdline > $tmpscr
chmod +x $tmpscr
response=$($tmpscr)
rm $tmpscr

【讨论】:

    【解决方案2】:

    错误未重现,以下测试正常:

    $ cat prueba.sh 
    target=www.google.com
    
    ...your script.
    
    $ ./prueba.sh 
    
    curl -s www.google.com
    
    response:
    ... the html answer
    EOF
    

    * 第二次测试也通过 *

    $ cat prueba.sh 
    message='<soap:Envelope xmlns:soap (...) full message xml</soap:Envelope>'
    header='http://soap.xxxxxx/yyyyy/zzzzz'
    target=www.google.com
    
    ... remainder script
    
    $ ./prueba.sh 
    curl -s -H 'http://soap.xxxxxx/yyyyy/zzzzz' --data-ascii '<soap:Envelope xmlns:soap (...) full message xml</soap:Envelope>' www.google.com
    response:
    ...html
    

    【讨论】:

    • 我认为问题的线索是在请求中包含肥皂信封。没有设置 $message 值的简单请求也适用于我。
    • 通常可疑的是符号 。您能否将测试完成的原始问题添加到原始问题中?值和输出的初始化。
    • 我不能,它有太多机密的公司资料。我像安东尼建议的那样使用了 set -xv - bash 已经从这个信封中逃脱了垃圾,难怪它不起作用。
    猜你喜欢
    • 1970-01-01
    • 2021-06-30
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多