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

如何在Bash函数中将curl的Content-Type请求头设置为可选

实现方案

不用改动原有函数的核心结构,也不会破坏现有的调用逻辑,只要给Content-Type加个带默认值的可选参数即可:

  • 用Bash原生的变量默认值语法,未传入自定义Content-Type时自动 fallback 到application/json,和原有逻辑完全一致
  • 把硬编码的Content-Type请求头换成变量引用,顺便修复原代码里$SCHEMA未加双引号容易被特殊字符、空格拆分解析错误的小问题,去掉冗余的| cat管道(grep本身就能直接处理标准输入,多接cat无实际作用)

修改后的完整代码:

function uploading_topic {
    # 第一个入参为可选自定义Content-Type,默认值为application/json
    local CONTENT_TYPE=${1:-"application/json"}
    echo -e "\n\n+++ Uploading $TOPIC +++"
    curl --location --request POST "https://$PULSAR_HOST:$HOST_PULSAR_PORT/admin/v2/schemas/$TENANT/$NAMESPACE/$TOPIC/schema" \
        --verbose \
        --header "Authorization: Bearer $AUTHORIZATION"  \
        --insecure \
        --header "Content-Type: $CONTENT_TYPE" \
        --data-raw "$SCHEMA" 2>&1 | grep "HTTP" # grep -v "Authorization"
}

调用方式

  • 上传普通JSON格式Schema时,和之前的调用方式完全一致,直接执行uploading_topic即可,不需要传任何额外参数,行为和修改前没有区别
  • 上传非JSON格式Schema时,把对应的Content-Type作为第一个参数传入即可,比如上传Avro格式Schema的调用示例:
uploading_topic "application/vnd.apache.avro+json"

如果是Protobuf、KeyValue等其他类型Schema,替换成Pulsar要求的对应Content-Type值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 02:57:08