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

使用PHP连接Azure Service Bus队列时遇cURL协议不支持错误

搞定PHP连接Azure Service Bus队列的cURL sb协议错误

嘿,这个错误我之前帮人排查过好多次啦,核心问题就是libcurl压根不支持Azure Service Bus用的sb专有协议,直接用Guzzle这类依赖cURL的工具去连sb://开头的地址肯定会踩坑。下面给你两个靠谱的解决办法:

方法一:用官方Azure Service Bus PHP SDK(最省心)

微软官方出的SDK专门处理这类问题,底层逻辑都帮你封装好了,不用自己跟协议较劲:

  1. 先通过Composer装包:
    composer require azure/service-bus
    
  2. 然后用SDK的类来操作队列,举个发送消息的例子:
    use Azure\ServiceBus\ServiceBusService;
    use Azure\ServiceBus\Models\BrokeredMessage;
    
    // 替换成你自己的Service Bus连接字符串和队列名
    $connectionString = "Endpoint=sb://你的命名空间.servicebus.windows.net/;SharedAccessKeyName=你的密钥名;SharedAccessKey=你的密钥值";
    $serviceBus = ServiceBusService::createFromConnectionString($connectionString);
    
    $message = new BrokeredMessage("这是一条测试消息");
    $serviceBus->sendQueueMessage("你的队列名称", $message);
    
    用SDK的话,协议转换、认证这些杂事都不用管,直接调用方法就行。

方法二:改用Service Bus的REST API(用标准HTTPS)

如果不想用SDK,也可以直接调它的REST接口,用cURL支持的HTTPS协议:

  • 第一步得先弄个SAS令牌(可以在Azure Portal里生成,或者写PHP代码生成,网上有现成的生成逻辑)
  • 然后写个cURL请求示例,比如发消息:
    // 替换成你的命名空间和队列名
    $apiUrl = "https://你的命名空间.servicebus.windows.net/你的队列名称/messages";
    $sasToken = "SharedAccessSignature sr=你的命名空间.servicebus.windows.net&sig=你的签名&se=过期时间&skn=密钥名称";
    
    $headers = [
        'Content-Type: application/json',
        "Authorization: $sasToken",
    ];
    
    $messageContent = json_encode(["content" => "测试REST API发送的消息"]);
    
    $ch = curl_init($apiUrl);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $messageContent);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    
    $response = curl_exec($ch);
    if (curl_errno($ch)) {
        echo 'cURL出错啦: ' . curl_error($ch);
    } else {
        echo '消息发送成功!响应状态码: ' . curl_getinfo($ch, CURLINFO_HTTP_CODE);
    }
    curl_close($ch);
    
    这种方式用的是标准HTTPS,完全不会有协议不支持的问题。

补充说明下为啥会报错

Azure Service Bus的sb协议是它自己搞的专有协议,基于AMQP或者TCP实现,而cURL只认HTTP、HTTPS、FTP这些标准协议,所以直接拿cURL去碰sb://的地址,自然就会抛出那个错误啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:00:45