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

PHP Curl发送PUT请求执行到curl_exec时停止无报错如何解决

核心问题原因

你使用的CURLOPT_PUT配置项是为文件流上传设计的,启用后curl会等待读取CURLOPT_INFILE指定的输入流,你未配置该参数,所以程序会卡在curl_exec阶段等待输入,无报错也无返回。

修复方案

将CURLOPT_PUT替换为自定义请求方法配置即可,修改后的完整代码如下:

public function updateProduct($product) {
        $id = $product->{"id"};
        $sku = $product->{"sku"};
        $infiniteInventory = $product->{"infiniteInventory"};
        $images = $product->{"images"};
        $category = $product->{"category"};
        $adaptivePrice = $product->{"adaptivePrice"};
        $manualPrice = $product->{"manualPrice"};
    
        $url = "https://system-url.de/myId/products/".$id;

        $curl = curl_init($url);
        curl_setopt($curl, CURLOPT_URL, $url);
        // 替换原CURLOPT_PUT配置
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        // 新增超时配置,避免程序无限制卡住
        curl_setopt($curl, CURLOPT_TIMEOUT, 30);
        curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);

        $headers = array(
            "Authorization: Bearer ".$this->getToken(),
            "Content-Type: application/json",
        );
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);

        $obj = [
            "sku"=> $sku,
            "title"=> [
                "de_DE"=> "Claude"
            ],
            "infiniteInventory"=> $infiniteInventory,
            "images"=> $images,
            "category"=> $category,
            "adaptivePrice"=> $adaptivePrice,
            "manualPrice"=> $manualPrice
        ];

        $obj = json_encode($obj);
        // 新增JSON编码校验,避免非法数据导致请求失败
        if (json_last_error() !== JSON_ERROR_NONE) {
            var_dump("JSON编码错误:".json_last_error_msg());
            return;
        }

        curl_setopt($curl, CURLOPT_POSTFIELDS, $obj);

        // 调试用配置,生产环境建议删除
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        
        $resp = curl_exec($curl);
        // 新增Curl错误捕获,方便定位问题
        if(curl_errno($curl)){
            var_dump("Curl请求错误:".curl_error($curl));
        }
        curl_close($curl);
        var_dump($resp);

        return;
}

注:原代码中通过HEREDOC定义的$data变量未被使用,可直接删除。

其他排查项

  • 确认$this->getToken()返回的鉴权token与reqbin平台使用的一致,无权限问题
  • 确认本地网络可正常访问目标接口域名,不存在防火墙、代理拦截
  • 若目标接口配置了IP白名单,需将本地出口IP加入白名单

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:24:02