如何将CURL请求方法设置为PUT?代码失效求助
解决PHP Curl PUT请求失效的问题
嘿,我一眼就发现问题所在了——你在设置CURLOPT_CUSTOMREQUEST时用错了变量名!你初始化的Curl句柄是$ch,但这一行写成了$curl,导致PUT请求的配置根本没被应用到正确的句柄上,Curl自然还是用默认的请求方法在发送请求。
修正后的完整代码
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); // 修正变量名,把$curl改成$ch curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); // 别忘了执行请求并关闭句柄 $response = curl_exec($ch); if(curl_errno($ch)){ echo 'Curl错误:' . curl_error($ch); } curl_close($ch);
额外的优化建议
- 可以去掉手动设置的
Content-Length头:Curl会自动根据CURLOPT_POSTFIELDS的内容计算并设置正确的长度,避免因字符串编码或计算失误导致的请求异常; - 生产环境中建议开启SSL验证:
CURLOPT_SSL_VERIFYHOST和CURLOPT_SSL_VERIFYPEER设为0会跳过SSL证书校验,存在安全风险,建议保留默认的1(或2)值,并确保服务器的SSL证书是可信的; - 如果你更倾向于标准的PUT方式,也可以使用
CURLOPT_PUT,但它通常配合CURLOPT_INFILE用于读取文件内容发送,对于内存中的JSON数据,当前CURLOPT_CUSTOMREQUEST + CURLOPT_POSTFIELDS的方式更直接。
内容的提问来源于stack exchange,提问作者Utsav Chatterjee
相关产品推荐
相关产品推荐

