You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用CURL抓取HTML内容并作为表单数据POST至接口?

解决CURL传递抓取的HTML作为表单数据的问题

看起来你遇到的核心问题是抓取的HTML里包含特殊字符(比如引号、换行、&符号等),破坏了CURL表单数据的格式,导致服务器无法正确解析html_text字段。我来给你两个可靠的解决方案:

方案1:使用--data-urlencode自动处理特殊字符

这个方法会自动对HTML内容进行URL编码,避免特殊字符干扰表单结构,是最简洁的方式:

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

--data-urlencode会把HTML里的双引号、换行、&等字符转义成服务器能识别的格式,确保$_POST['html_text']能正确获取到完整的HTML内容。

方案2:通过临时文件传递HTML内容

如果HTML内容特别大或者你想更直观地处理,先把内容存到临时文件再传递也是个好办法:

# 先把目标页面的HTML抓取到临时文件
curl -s -L https://somedomain.com?feed=sports > temp_html.txt

# 发送表单请求,用@符号读取文件内容作为html_text的值
curl http://example.com/campaigns/create.php \
  -F api_key=myKey \
  -F subject="My Subject" \
  -F list_ids=12345 \
  -F html_text=@temp_html.txt &>/dev/null

# 用完临时文件可以删除
rm temp_html.txt

这种方式下CURL会自动处理文件里的所有特殊字符,不会出现格式混乱的问题。

为什么你之前的写法会失败?

  • 不带单引号的写法:当HTML里有双引号时,会提前闭合html_text="..."的引号,导致后面的HTML内容被当成CURL的额外参数,服务器根本识别不到完整的html_text字段,反而把抓取的HTML直接输出了;
  • 加单引号的写法:会给HTML内容前后多套一层单引号,这会让服务器收到的html_text值包含多余的引号,大概率不符合接口的预期格式。

内容的提问来源于stack exchange,提问作者Probal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:53:16