如何修复使用PHP cURL提交网站评论的错误代码?
PHP cURL评论提交代码修复方案
原代码存在的问题
- 代码里混入了HTML转义字符(
>、"),PHP原生环境无法识别这类转义内容 - 直接传数组给
CURLOPT_POSTFIELDS时,cURL会自动使用multipart/form-data编码,但绝大多数网站的评论提交接口要求的是application/x-www-form-urlencoded格式,容易被接口拒绝 - 没有错误处理逻辑,请求失败时没法知道具体报错原因
- 缺少常规浏览器请求头,很容易被站点的反爬策略拦截
修复后的完整代码
<?php // 初始化cURL $mycurl = curl_init(); // 配置POST参数,可自行修改对应值 $postData = [ "Name" => "Example", "Email" => "Example@gmail.com", "Comment" => "这是测试评论内容" ]; curl_setopt_array($mycurl, [ // 替换为实际的评论提交接口地址 CURLOPT_URL => "https://example.com", CURLOPT_RETURNTRANSFER => true, // 超时时间调整为10秒,避免网络慢时请求中断 CURLOPT_TIMEOUT => 10, CURLOPT_FOLLOWLOCATION => true, CURLOPT_POST => true, // 处理POST参数为表单编码格式 CURLOPT_POSTFIELDS => http_build_query($postData), // 模拟Chrome浏览器UA,避免被拦截 CURLOPT_USERAGENT => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36", // 如果站点校验来源,可添加对应Referer // CURLOPT_REFERER => "https://example.com/comment-page", // 本地测试时如果目标站是HTTPS且证书有问题可以开启下面两行,生产环境建议删除 // CURLOPT_SSL_VERIFYPEER => false, // CURLOPT_SSL_VERIFYHOST => false ]); $result = curl_exec($mycurl); // 错误判断 if(curl_errno($mycurl)) { echo "请求错误:" . curl_error($mycurl); } else { echo "请求成功,返回内容:" . $result; } curl_close($mycurl); ?>
补充说明
如果还是提交失败,需要先确认目标站点的评论接口要求:
- 部分站点的字段名可能不是
Name/Email/Comment,可以打开浏览器F12抓一下正常提交评论的请求参数,对应修改$postData里的键名即可 - 如果站点要求登录后才能评论,还需要在配置中加
CURLOPT_COOKIE参数传入登录后的cookie信息
内容的提问来源于stack exchange,提问作者Proxcis
相关产品推荐
相关产品推荐

