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

Linux下Curl请求API返回401未授权问题求助

解决curl请求API返回401未授权的问题

1. 修复Basic Auth的Base64编码问题

你的脚本中用echo "$user:$password" | base64生成认证字符串时,echo默认会在末尾添加换行符,导致Base64编码结果包含换行,服务器无法正确解析。修改为不带换行的输出:

#!/bin/bash
url="https://komat/api/v1/jedh"
user="toto"
password="blomatis!"
curl_opts=(
    --insecure
    --request GET
    --header "Accept: application/json"
    --header "Authorization: Basic $(echo -n "$user:$password" | base64 )"
)

curl "${curl_opts[@]}" "$url"

或者直接使用curl内置的--user参数自动处理Basic Auth,更可靠:

curl --insecure --user "$user:$password" --header "Accept: application/json" "$url"

2. 验证Chrome的认证方式是否为Basic Auth

Chrome能正常访问可能是因为已通过Cookie或其他方式认证,而非Basic Auth。按以下步骤排查:

  • 打开Chrome开发者工具(F12),切换到Network标签
  • 刷新API页面,找到对应请求,查看Headers中的Authorization字段是否存在,或是否有Cookie字段
  • 如果是Cookie认证,复制Chrome中的Cookie字符串,在curl中添加--cookie参数:
    curl --insecure --cookie "COOKIE_KEY=COOKIE_VALUE; ANOTHER_COOKIE=VALUE" --header "Accept: application/json" "$url"
    

3. 排查curl版本或参数兼容性问题

CentOS 7.9默认的curl版本较旧(通常是7.29.x),可能对某些参数处理有差异:

  • 尝试简化命令,直接执行而非用数组传递参数:
    curl --insecure -H "Accept: application/json" -H "Authorization: Basic $(echo -n "$user:$password" | base64)" "$url"
    
  • 若有需要,可升级curl到新版本(通过EPEL源):
    yum install epel-release -y
    yum update curl -y
    

4. 检查网络代理或防火墙设置

确认CentOS机器是否设置了HTTP/HTTPS代理,而Chrome未使用:

  • 执行echo $http_proxy $https_proxy查看代理设置
  • 若存在代理,可在curl中添加--noproxy "*"参数禁用代理测试:
    curl --insecure --noproxy "*" --user "$user:$password" --header "Accept: application/json" "$url"
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 22:42:24