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

PHP调用Microsoft OCR API返回空响应,求排查与解决方案

问题分析与修复方案

你代码里的几个关键错误:

  1. URL格式错误:构造函数里的API地址末尾多了HTTP/1.1,这是HTTP请求协议标识,不需要写在URL里,会导致curl请求地址无效,直接返回空响应。
  2. 方法调用参数不匹配:recognize方法定义只接受1个参数,但index.php里传了2个($image_url和"ocr"),虽然暂时不会直接导致空响应,但会引发PHP警告。
  3. 数组直接打印问题:json_decode返回的是数组结构,直接用print输出只会显示Array,看不到实际解析后的内容。
  4. SSL验证关闭风险:CURLOPT_SSL_VERIFYPEER设为false会跳过SSL证书验证,生产环境不建议这么做,可能带来安全风险。

修正后的代码:

首先是Computer_Vision类的修正:

<?php
class Computer_Vision{

    public function __construct(){
        // 去掉末尾多余的HTTP/1.1
        $this->azure_ocr="https://brazilsouth.api.cognitive.microsoft.com/computervision/imageanalysis:analyze?api-version=2023-04-01-preview&features=read&language=pt";
        $this->subscription_key="blahblahblah"; // 替换为你的实际API密钥
    }
    
    public function recognize($image_url){

        $data = array("url" => $image_url);
        
        $azure_url = $this->azure_ocr;
        print($azure_url . "<br/>");
        
        $key=$this->subscription_key;
        $data_string = json_encode($data);
        print($data_string . "<br/>");
        
        $curl = curl_init($azure_url);
        // 生产环境建议开启SSL验证,可注释或删除下面这行
        // curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data_string);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1 );
        curl_setopt($curl, CURLOPT_POST,           1 );
        curl_setopt($curl, CURLOPT_HTTPHEADER, array(
            'Content-Type: application/json',
            'Ocp-Apim-Subscription-Key:'.$key
        ));
        $response = curl_exec($curl);
        print("response: " . $response . "<br/>");
        
        
        if(curl_error($curl)) {
            print('error:' . curl_error($curl));
        } else {
            $json_object = json_decode($response, true);
            // 用print_r查看数组结构内容
            print("json_object: ");
            print_r($json_object);
        }
        
        curl_close($curl);
        // 返回解析后的结果,方便调用方使用
        return $json_object;
    }
}
?>

然后是index.php的修正:

<?php 
    $azure = new Computer_Vision();
    $image_url = "https://portal.vision.cognitive.azure.com/dist/assets/OCR1-6dda571d.jpg";
    // 仅传递一个参数,与方法定义匹配
    $ocr = $azure->recognize($image_url);
?>

最优实现建议:

  1. 增强错误处理:除了curl错误,新增HTTP响应码检查(用curl_getinfo($curl, CURLINFO_HTTP_CODE)),比如401代表密钥无效,400代表请求格式错误,能更精准定位问题。
  2. 抽离配置信息:把API密钥、端点URL放到独立的配置文件或环境变量中,不要硬编码在类里,方便后续维护和多环境切换。
  3. 完善请求判断:curl_exec失败时会返回false,可先判断$response === false再处理错误,比仅依赖curl_error更全面。
  4. 保持SSL验证开启:生产环境务必开启SSL验证,若遇到证书问题,可通过CURLOPT_CAINFO指定CA证书路径解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 15:47:06