PHP使用cURL向API发送JSON格式账号密码请求返回false如何解决?
问题原因及修复方案
1. 核心错误:误用cURL句柄
你在执行$response = curl_exec($curl)拿到返回结果$response后,错误地将$response作为cURL句柄传入curl_setopt,curl_setopt的第一个参数必须是curl_init()返回的cURL资源(也就是你的$curl变量),这几行冗余的错误代码直接删除即可。
2. 优化JSON构造逻辑
手动拼接JSON容易出现转义、格式错误,建议使用PHP内置的json_encode生成符合规范的JSON字符串,避免请求体格式不兼容。
3. 增加错误排查逻辑
curl_exec返回false时,可以通过curl_error()、curl_errno()获取具体的错误信息,方便定位是网络连通性、请求参数还是服务端校验的问题。
修正后的完整代码
<?php $curl = curl_init(); // 构造请求数据,自动生成合法JSON $postData = [ 'username' => 'oswaldo', 'password' => '1' ]; $postJson = json_encode($postData); curl_setopt_array($curl, array( CURLOPT_URL => 'http://192.168.0.2/apilocation', CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS => $postJson, CURLOPT_HTTPHEADER => array( 'Content-Type: application/json' ), )); $response = curl_exec($curl); // 排查错误逻辑 if($response === false) { echo 'cURL错误码: ' . curl_errno($curl) . '<br>'; echo 'cURL错误信息: ' . curl_error($curl) . '<br>'; } curl_close($curl); var_dump($response); ?>
额外排查建议
如果修改代码后还是请求失败,可以对照Postman的请求配置逐项检查:
- 确认Postman是否配置了其他请求头(比如Authorization、User-Agent等),如果有需要补充到
CURLOPT_HTTPHEADER数组中 - 确认API端是否有IP访问限制、请求频率限制
- 如果是本地测试环境,确认PHP运行环境的网络可以正常访问192.168.0.2的服务
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

