shell中curl请求变更使用markdown

本文展示了如何在Shell脚本中利用curl命令发送带变量的Markdown格式消息到微信企业API。内容包括构建成功或失败的报告链接,并在构建完成后自动通过Webhook发送。

如果使用变量,得换成双引号,数据里面也有双引号,加转义字符即可。
  curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=d1b0f47c-9b50-452b-8467-e681e181af28' \
   -H 'Content-Type: application/json' \
  -d "
   {
    \"msgtype\": \"markdown\",
    \"markdown\": {
        \"content\": \"[发票主流程构建失败报告](${TEST_REPORT})\"
    }
}"

 

完整示例:

#!/bin/bash
file="src/main/resources/config.properties"
/usr/bin/sed -i  "s/env=.*/env=${env}/g" ${file}

PROJECT_NAME=$JOB_NAME;
BUILD_NUM=$BUILD_NUMBER;

[[  $PROJECT_NAME = "" ]] && echo "工程名参数为空" && exit 1
[[  $BUILD_NUM = "" ]] && echo "构建id参数为空" && exit 1

TEST_REPORT="http://10.199.137.177:8080/jenkins/job/${PROJECT_NAME}/${BUILD_NUM}/allure/#suites"
echo ">>>>>>>>TEST_REPORT:${TEST_REPORT}"

<think>好的,我现在需要帮助用户了解如何在Shell脚本中使用curl发送HTTP请求并解析返回的JSON或文本响应。首先,我要整理用户的问题,明确他们的需求。用户已经提供了两个引用,一个是关于Python中使用requests库发送请求的例子,另一个是在Shell使用curl发送请求并处理响应。用户现在想转到Shell环境下,用curl实现类似的功能,并且需要解析返回的数据。 首先,我需要回忆一下curl的基本用法。curl是一个命令行工具,用于传输数据,支持多种协议,包括HTTP。在Shell脚本中,通常使用curl发送GET、POST等请求,并且可以添加请求头、参数等。然后,用户需要解析响应,可能是JSON或者纯文本。对于JSON解析,常用的工具有jq,而文本处理可以用grep、awk、sed等工具。 接下来,我需要考虑用户可能的场景。比如,用户可能需要在脚本中自动化发送请求,并根据响应结果执行不同的操作。例如,从API获取数据后提取某个字段的值,或者检查HTTP状态码以判断请求是否成功。此外,用户可能需要处理不同的响应内容类型,比如JSON和纯文本,因此解析方法需要灵活。 然后,我需要组织步骤。首先,发送请求的部分,包括GET和POST方法的示例。然后,处理响应状态码,保存响应内容,解析JSON和文本。同时,需要考虑到错误处理,比如网络故障或无效的JSON格式。可能还需要提到安装jq的方法,因为有些系统可能没有预装这个工具。 还要注意用户提供的引用内容。引用[2]中有一个例子,使用curl -i来包含响应头,但用户可能需要的是只获取响应体。这时候需要说明-i和--silent等选项的区别。另外,引用[1]中的Python代码展示了如何处理JSON和文本响应,同样需要在Shell中实现类似的功能,比如使用try-except块,但在Shell中可能需要检查响应内容是否为JSON。 可能的挑战是如何在Shell中有效地解析JSON。比如,使用jq来提取特定字段,如果jq不存在,可能需要提示用户安装。同时,处理可能的错误情况,比如curl请求失败,或者返回的JSON格式不正确,这时脚本应该如何处理,比如退出码检查。 另外,用户可能需要示例代码,所以在回答中需要提供具体的curl命令和解析步骤的代码片段。例如,发送GET请求,添加headers,传递参数,然后解析状态码和内容。对于POST请求,可能需要使用-d选项发送数据,并设置Content-Type头。 最后,需要验证这些步骤是否正确。比如,测试一个简单的API,用curl发送请求,然后用jq解析,确保能够正确提取数据。同时,考虑不同情况下的输出,比如当响应不是JSON时,如何处理纯文本。 总结,回答的结构应该是先介绍curl的基本用法,然后分步骤讲解如何发送请求,处理响应,解析数据,并提供示例代码。同时,生成相关问题,帮助用户进一步学习相关知识。</think>### 在Shell脚本中使用cURL发送请求并解析响应的完整步骤 #### 1. 基础GET请求与响应处理 ```bash # 发送简单GET请求并输出原始响应 curl https://api.example.com/data # 保存响应到变量 response=$(curl -s https://api.example.com/data) echo "完整响应: $response" ``` #### 2. 添加请求头与参数 ```bash # 设置自定义请求头与查询参数 curl -s -H "Authorization: Bearer your_token" \ -H "Content-Type: application/json" \ --get --data-urlencode "param1=value1" \ --data-urlencode "param2=value2" \ https://api.example.com/endpoint ``` #### 3. 处理HTTP状态码 ```bash # 获取状态码并处理 status_code=$(curl -s -o /dev/null -w "%{http_code}" https://api.example.com) if [ $status_code -eq 200 ]; then echo "请求成功" elif [ $status_code -eq 401 ]; then echo "认证失败" >&2 exit 1 else echo "未知错误: $status_code" >&2 exit 1 fi ``` #### 4. 结构化JSON解析(需要jq) ```bash # 安装jq: sudo apt-get install jq (Debian/Ubuntu) response=$(curl -s https://api.example.com/users/123) user_name=$(echo "$response" | jq -r '.name') user_age=$(echo "$response" | jq '.age') # 处理嵌套JSON echo "用户所在城市: $(echo "$response" | jq -r '.address.city')" # 处理数组数据 echo "第一个订单号: $(echo "$response" | jq -r '.orders[0].id')" ``` #### 5. POST请求与数据提交 ```bash # 发送JSON格式POST请求 curl -s -X POST \ -H "Content-Type: application/json" \ -d '{"username":"testuser", "password":"secret"}' \ https://api.example.com/login # 发送表单数据 curl -s -X POST \ -d "username=testuser" \ -d "password=secret" \ https://api.example.com/login ``` #### 6. 文件上传处理 ```bash # 上传文件并记录进度 curl -# -F "file=@/path/to/file.txt" \ -F "description=重要文档" \ https://api.example.com/upload ``` #### 7. 错误处理与调试 ```bash # 启用详细日志 curl -v https://api.example.com # 超时设置与重试 curl --max-time 10 --retry 3 https://api.example.com # 错误捕获 if ! response=$(curl -s --fail https://api.example.com); then echo "请求失败,错误码: $?" >&2 exit 1 fi ``` #### 8. 流式数据处理 ```bash # 处理实时数据流 curl -s -N https://stream.example.com/events | \ while read -r line; do event_type=$(echo "$line" | jq -r '.type') case $event_type in "message") handle_message "$line" ;; "alert") trigger_alert "$line" ;; esac done ``` #### 9. 高级模式匹配 ```bash # 使用grep提取特定模式 curl -s https://example.com | \ grep -oP '<h2>\K[\w\s]+(?=</h2>)' # 使用awk处理表格数据 curl -s https://data.example.com/csv | \ awk -F, '{print "列1:", $1, "列3:", $3}' ``` #### 10. 综合应用示例 ```bash #!/bin/bash # 配置参数 API_ENDPOINT="https://api.example.com/v1" AUTH_TOKEN="your_api_token_here" # 执行带认证的请求 response=$(curl -s -w "\n%{http_code}" \ -H "Authorization: Bearer $AUTH_TOKEN" \ "$API_ENDPOINT/sensors") # 分离状态码和内容 status_code=$(echo "$response" | tail -n1) content=$(echo "$response" | sed '$d') # 处理响应 case $status_code in 200) echo "传感器数据:" echo "$content" | jq '.[] | {id: .id, value: .lastReading}' ;; 401) echo "认证失败,请检查令牌" >&2 exit 1 ;; 500) echo "服务器错误:$(echo "$content" | jq -r .error)" >&2 exit 1 ;; *) echo "未知响应:$status_code" >&2 echo "$content" exit 1 ;; esac ``` ### 注意事项 1. 使用`-s`参数隐藏进度信息,但调试时可移除 2. 添加`--fail`参数使HTTP错误时返回非零退出码 3. 对于敏感数据,使用`stty -echo`隐藏输入 4. 考虑设置超时:`--max-time 30` 5. 处理特殊字符时使用`jq -r`输出原始字符串 6. 在循环中注意API的速率限制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值