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

如何在http-client中使用HTTP Basic Auth发送认证请求?

实现方案

curl -u 'user:pass' 的核心逻辑是向请求添加HTTP Basic认证凭据,下面给出两种实现方式,优先推荐符合生态惯用写法的安全实现。

推荐写法(生产环境适用)

这种写法不把凭据写入URI,避免日志、排障打印时泄露密码,是社区通用的标准写法:

(use http-client intarweb uri-common base64)

;; 构造目标请求地址
(define api-uri (uri-reference "https://api.example.net/a/b/c"))

;; 生成Basic认证头,逻辑和curl -u完全一致
(define basic-auth-header
  (cons 'authorization
        (string-append "Basic "
                       (base64-encode (string->utf8 "user:pass")))))

;; 发起GET请求,最后一个参数是响应处理逻辑,可按需替换
(call-with-input-request
 (make-request method: 'GET
               uri: api-uri
               headers: (headers (list basic-auth-header)))
 #f
 read-string)

注意:如果使用中遇到认证失败,可以检查base64编码结果是否带自动换行,部分旧版本base64库会在长字符串后插入换行符,手动剔除\n、\r字符即可。

简化写法(仅临时测试适用)

你提到的make-uri传入用户名密码的方式确实可以生效,http-client会自动识别URI中的凭据生成对应认证头,代码更短,但因为凭据会明文存在于URI对象中,不推荐生产环境使用:

(use http-client uri-common)

(call-with-input-request
 (make-uri scheme: 'https
           host: "api.example.net"
           path: '("a" "b" "c")
           username: "user"
           password: "pass")
 #f
 read-string)

两种写法发出的HTTP请求和给出的curl命令完全等效,服务端不会有识别差异。如果后续需要切换其他认证方式(比如Bearer Token、Digest认证),第一种写法修改成本更低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:01:15