CURL POST请求问题:出现curl_setopt()参数警告
解决curl_setopt()参数类型错误的问题
这个错误的根源很明确:CURLOPT_MUTE这个cURL选项在你的PHP版本中要么未被定义,要么已经被废弃。当PHP找不到这个常量时,会自动把它当作字符串"CURLOPT_MUTE"处理,而curl_setopt()的第二个参数要求必须是整数类型的cURL选项常量,这就导致了expects parameter 2 to be long, string given的错误。
具体解决方案
- 移除
CURLOPT_MUTE相关代码:这个选项在PHP 5.5.0之后就被废弃了,而且你已经设置了CURLOPT_RETURNTRANSFER = 1,它会把请求结果保存到变量中而不是直接输出到页面,完全可以替代CURLOPT_MUTE的作用。 - 优化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
相关产品推荐
相关产品推荐

