Shell 脚本 - CURL post 使用另一个 CURL 捕获的表单数据 html 参数中的文本

Shell script - CURL post form data with another CURL captured html text in parameters

我需要捕获一个 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 用不必要的单引号 (') 括起来之外,上面的示例工作正常。有什么建议可以让我摆脱 html_text 周围的这个单引号吗?

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

    -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 ... ,其中 [= 之后的文本14=] 应该是一个文件名。

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

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="<-"