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

CURL POST请求问题:出现curl_setopt()参数警告

解决curl_setopt()参数类型错误的问题

这个错误的根源很明确:CURLOPT_MUTE这个cURL选项在你的PHP版本中要么未被定义,要么已经被废弃。当PHP找不到这个常量时,会自动把它当作字符串"CURLOPT_MUTE"处理,而curl_setopt()的第二个参数要求必须是整数类型的cURL选项常量,这就导致了expects parameter 2 to be long, string given的错误。

具体解决方案

  1. 移除CURLOPT_MUTE相关代码:这个选项在PHP 5.5.0之后就被废弃了,而且你已经设置了CURLOPT_RETURNTRANSFER = 1,它会把请求结果保存到变量中而不是直接输出到页面,完全可以替代CURLOPT_MUTE的作用。
  2. 优化SSL相关选项:CURLOPT_SSL_VERIFYHOST在PHP 5.6.0之后推荐设置为2(之前的1已经被废弃,会触发警告),它会严格验证SSL证书中的主机名。

修正后的完整代码

$ch = curl_init(POST_URL);
// 移除CURLOPT_MUTE
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 修改为2
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); // 不需要加引号,直接传变量即可
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);

额外注意事项

  • 确保$xml变量已经正确生成了有效的XML内容,避免因为XML格式错误导致请求失败。
  • 确认POST_URL是正确的目标接口地址,没有拼写错误。
  • 如果你的PHP版本较低(低于5.6),CURLOPT_SSL_VERIFYHOST可以保留为1,但建议尽量升级PHP版本以保证安全性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:52:50