如何用cURL向WordPress REST API传输认证数据?认证失败求助
解决cURL POST请求认证失败的问题
以下是几个可能的原因和对应的修复方案:
1. 确认认证类型是否匹配
如果服务器要求的不是基础HTTP认证(Basic Auth),CURLOPT_USERPWD不会生效:
- Digest认证:添加认证类型设置
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
- Bearer Token认证:替换
CURLOPT_USERPWD,改为设置请求头
curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Authorization: Bearer YOUR_TOKEN_HERE' ));
2. 检查POST数据编码格式
当你用数组作为CURLOPT_POSTFIELDS的值时,cURL会自动使用multipart/form-data编码,但很多API要求application/json格式:
// 将数组转为JSON字符串 $jsonData = json_encode($data); curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData); // 设置Content-Type头 curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($jsonData) ));
3. 处理重定向导致的认证丢失
如果请求URL存在重定向,默认cURL不会在重定向后携带认证信息,需要添加以下设置:
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, true);
4. 调试请求详情
可以开启cURL的调试模式,查看实际发送的请求头和数据,定位问题:
curl_setopt($ch, CURLOPT_VERBOSE, true); // 将调试信息输出到临时文件 $verbose = fopen('php://temp', 'w+'); curl_setopt($ch, CURLOPT_STDERR, $verbose); $result = curl_exec($ch); // 读取调试信息 rewind($verbose); $verboseLog = stream_get_contents($verbose); echo "Verbose log:\n" . $verboseLog; fclose($verbose);
把这些修改对应到你的代码中,重新测试即可。
内容的提问来源于stack exchange,提问作者composersucks
相关产品推荐
相关产品推荐

