1

I need to capture a html content and pass it to another curl as form data.

My solution:

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

Note: Yes, I have tried html_text="$(curl -s -L https://somedomain.com?feed=sports)". But server can't resolve isset($_POST['html_text']) then.

My output:

'<!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>'

This above example works fine except html_text wrapped with an unnecessary single quote ('). Any suggestion how can get I rid of this single quote around the html_text?

4

1 回答 1

2

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

    -F html_text="'$(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 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="<-"
于 2018-04-12T06:28:55.117 回答