Shell脚本 - CURL发布表单数据,另一个CURL在参数中捕获html文本

时间:2018-04-12 04:31:43

标签: bash shell curl sendy

我需要捕获html内容并将其作为表单数据传递给另一个curl。

我的解决方案:

curl http://example.com/campaigns/create.php \
    -F api_key=myKey \
    -F subject="My Subject" \
    -F list_ids=12345 \
    -F html_text="'$(curl -s -L https://somedomain.com?feed=sports)'" &>/dev/null

注意:是的,我尝试过html_text =" $(curl -s -L https://somedomain.com?feed=sports)"。但服务器无法解决isset($ _ POST [' html_text'])。

我的输出:

'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head>
    .....
    </center> </body> </html>'

以上示例工作正常,但html_text包含不必要的单引号(&#39;)。任何建议怎么能摆脱html_text周围的这个单引号?

1 个答案:

答案 0 :(得分:2)

单引号放在那里。不要那样做。

    -F html_text="'$(curl ... -)'"

就shell而言,双引号将值收集到单个字符串中,文字单引号是该文字字符串的一部分。

固定代码:

curl http://example.com/campaigns/create.php \
    -F api_key=myKey \
    -F subject="My Subject" \
    -F list_ids=12345 \
    -F html_text="$(curl -s -L https://somedomain.com?feed=sports)" >/dev/null 2>&1

另请注意POSIX兼容的重定向;我认为没有理由使用特定于Bash的表示法&>

如果服务器无法处理此值,可能会以某种特定格式或编码方式对其进行处理;但是如果无法访问有关您服务器的信息,我们无法帮助解决该部分问题。

更新

如果HTML以<字符开头,则会显示顶级curl,就像您说-F<!DOCTYPE ... <之后的文字应该是文件名。

您可以通过明确使用此构造来解决此问题:

curl -s -L https://somedomain.com?feed=sports |
curl http://example.com/campaigns/create.php \
    -F api_key=myKey \
    -F subject="My Subject" \
    -F list_ids=12345 \
    -F html_text="<-"