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

PHP发送cURL请求返回Bad Request错误的排查求助

问题排查结果

你的代码存在3处直接导致400 Bad Request的错误:

  • payload结构错误:调用json_encode时额外给$data包了一层数组,最终发送的是JSON数组格式,而接口要求接收顶层为JSON对象的请求体,结构完全不匹配。
  • 请求头配置错误:手动硬编码了Content-Length: 65,实际生成的请求体长度和该值不符,cURL会自动计算请求体长度,无需手动设置该头,硬编码错误值会直接被服务端拦截。
  • 未显式声明POST请求:仅设置CURLOPT_POSTFIELDS在部分cURL版本下不会自动切换为POST请求,需显式指定请求方法。
修正后可运行代码
function scustom_curl($url){
    $ch = curl_init();
    $data = [
        "keys" => [
            "txv" => [44],
            "ats" => [5]
        ],
        "skipCount" => 0,
        "maxResultCount" => 12
    ];
    // 直接编码$data,不再额外包裹数组
    $payload = json_encode($data);

    curl_setopt($ch, CURLOPT_URL, $url);
    // 显式指定POST请求
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);

    $headers = [
        'Host: www.ilan.gov.tr',
        // 测试时如果cookie过期可以先注释掉该行,或替换为最新的有效cookie
        'Cookie: _ga=GA1.3.951992202.1654450742; _gid=GA1.3.480689736.1654596075',
        'Sec-Ch-Ua: "-Not.A/Brand";v="8", "Chromium";v="102"',
        'Pragma: no-cache',
        'X-Request-Origin: IGT-UI',
        'Sec-Ch-Ua-Mobile: ?0',
        'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.63 Safari/537.36',
        'Content-Type: application/json-patch+json',
        'Accept: text/plain',
        'Expires: Sat, 01 Jan 2000 00:00:00 GMT',
        'Cache-Control: no-cache',
        'X-Requested-With: XMLHttpRequest'
        // 已删除硬编码的Content-Length头,由cURL自动计算
    ];
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

    $result = curl_exec($ch);
    if (curl_errno($ch)) {
        echo 'Error:' . curl_error($ch);
    }
    curl_close($ch);
    return $result;
}
补充说明

如果运行后仍返回错误,优先检查Cookie是否过期,该站点的部分接口会校验请求携带的Cookie有效性,你可以替换为自己抓包拿到的最新Cookie再测试。如果本地环境存在SSL证书校验问题,可临时将CURLOPT_SSL_VERIFYPEER设为false调试,生产环境建议保持开启。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 04:42:27