MST

星途 面试题库

面试题:Bash脚本中使用curl与wget处理复杂网络请求

假设需要通过Bash脚本,使用curl或wget向一个需要OAuth 2.0认证的API发送POST请求,携带JSON格式的请求体,并且处理可能出现的各种HTTP响应状态码(如401未授权、500服务器错误等),请编写相应的Bash脚本。
20.8万 热度难度
编程语言Bash

知识考点

AI 面试

面试题答案

一键面试
#!/bin/bash

# 定义API地址
api_url="https://example.com/api"

# 定义OAuth 2.0访问令牌
access_token="your_access_token"

# 定义请求体
request_body='{
    "key1": "value1",
    "key2": "value2"
}'

# 发送POST请求
response=$(curl -s -X POST \
    -H "Authorization: Bearer $access_token" \
    -H "Content-Type: application/json" \
    -d "$request_body" \
    "$api_url")

# 获取HTTP响应状态码
status_code=$(echo $response | grep -o '"status_code":[0-9]*' | grep -o '[0-9]*')

# 处理不同的HTTP响应状态码
case $status_code in
    200)
        echo "请求成功,响应内容:$response"
        ;;
    401)
        echo "未授权错误,可能需要重新获取访问令牌"
        ;;
    500)
        echo "服务器内部错误"
        ;;
    *)
        echo "其他HTTP状态码:$status_code,响应内容:$response"
        ;;
esac

说明:

  1. 请将api_url替换为实际的API地址。
  2. access_token替换为实际的OAuth 2.0访问令牌。
  3. request_body中定义了JSON格式的请求体内容,请根据实际需求修改。
  4. 上述脚本使用curl发送请求,通过grep提取响应中的状态码,并根据不同状态码进行处理。如果想用wget,则需安装jq工具用于处理JSON响应,示例如下:
#!/bin/bash

api_url="https://example.com/api"
access_token="your_access_token"
request_body='{
    "key1": "value1",
    "key2": "value2"
}'

response=$(wget -q --header="Authorization: Bearer $access_token" --header="Content-Type: application/json" --post-data="$request_body" -O - "$api_url")
status_code=$(echo $response | jq -r '.status_code')

case $status_code in
    200)
        echo "请求成功,响应内容:$response"
        ;;
    401)
        echo "未授权错误,可能需要重新获取访问令牌"
        ;;
    500)
        echo "服务器内部错误"
        ;;
    *)
        echo "其他HTTP状态码:$status_code,响应内容:$response"
        ;;
esac

这里假设响应JSON中有status_code字段来表示状态码,实际使用时请根据API响应结构调整jq命令。