我需要捕获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周围的这个单引号?
答案 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="<-"