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

PHP中使用file_get_contents与CURL调用API失败求助

解决PHP请求ADX API时的400 Bad Request问题

你在请求ADX的ListedCompanyOrderBook API时遇到的400错误,本质是请求格式不符合API的校验要求——不管是file_get_contents还是curl,默认的请求配置都太“朴素”,很容易被服务器拦截。下面给你具体的修复方案:

一、修复file_get_contents请求

file_get_contents默认不会携带浏览器级别的请求头,很多网站会拒绝这种非标准请求。你需要添加模拟浏览器的请求头,比如User-Agent、Accept等,试试这段代码:

<?php
$url = "https://www.adx.ae/en/_vti_bin/ADX/svc/trading.svc/ListedCompanyOrderBook?listedCompanyID=ADIB";

// 创建包含自定义请求头的上下文
$context = stream_context_create([
    'http' => [
        'header' => "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36\r\n" .
                    "Accept: application/json, text/javascript, */*; q=0.01\r\n" .
                    "X-Requested-With: XMLHttpRequest\r\n",
        'method' => 'GET'
    ]
]);

try {
    $response = file_get_contents($url, false, $context);
    if ($response === false) {
        $errors = error_get_last();
        echo "请求失败: " . $errors['message'];
    } else {
        // 成功获取响应后,可根据需求解析处理
        print_r($response);
    }
} catch (Exception $e) {
    echo "异常错误: " . $e->getMessage();
}
?>

二、修复curl请求

curl的问题大概率也是请求头缺失或SSL验证导致的。下面是配置完整的curl代码,同时会输出详细错误信息帮你排查:

<?php
$url = "https://www.adx.ae/en/_vti_bin/ADX/svc/trading.svc/ListedCompanyOrderBook?listedCompanyID=ADIB";

$ch = curl_init($url);

// 核心curl配置
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 将响应返回而非直接输出
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"); // 模拟浏览器标识
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Accept: application/json, text/javascript, */*; q=0.01",
    "X-Requested-With: XMLHttpRequest"
]);

// 注意:仅测试时临时关闭SSL验证,生产环境请确保服务器证书有效并开启验证
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

$response = curl_exec($ch);

if ($response === false) {
    echo "Curl错误: " . curl_error($ch);
} else {
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    echo "HTTP状态码: " . $httpCode . "\n";
    print_r($response);
}

curl_close($ch);
?>

三、常见问题原因分析

  • 请求头缺失:ADX的API可能会校验请求是否来自合法客户端,添加浏览器常用请求头可绕过这类拦截。
  • SSL证书验证失败:如果服务器SSL证书配置存在问题,curl默认会拒绝请求,临时关闭验证可快速排查是否为此原因。
  • 参数格式问题:虽然listedCompanyID=ADIB看起来正确,但可以确认API是否对参数大小写、格式有特殊要求。

如果还是无法解决,建议查看curl返回的具体错误信息,或结合HTTP状态码进一步定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:32:17