如何用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
相关产品推荐
相关产品推荐

