Curl调试GET请求时Authorization头部未在日志中显示
首先,我得先帮你理清为什么看不到Authorization头——这不是你的命令写错了,而是curl通过HTTP代理访问HTTPS站点时的请求流程导致的:
问题原因分析
从你提供的日志片段能看到,curl先和代理服务器(10.30.215.211:3128)建立了连接,然后发送了CONNECT请求来打通到myserver:8443的隧道。这个CONNECT请求的作用仅仅是让代理帮你建立一条到目标服务器的双向通道,不会携带你要发给目标服务器的Authorization头。
你当前的日志只输出到CONNECT请求的阶段,还没到隧道建立完成后,curl向目标服务器发送真正的GET /user?id=9829878请求的环节——那个时候Authorization头才会被发送出去,所以你在当前的日志片段里看不到它。
如何验证Authorization头确实被发送
你可以通过以下几种方式确认头信息是否正确发送:
- 查看目标服务器日志:如果你有权限访问
myserver的访问日志,直接在日志里搜索对应请求的记录,就能看到Authorization头是否存在。 - 使用curl的trace参数:用
--trace-ascii代替-vvv,它会输出curl发送和接收的所有字节内容,包括隧道建立后的完整请求:
打开生成的curl --trace-ascii trace.log --header "Authorization: Basic AAABBBCCCCDDDEEFFF=" https://myserver:8443/user?id=9829878trace.log文件,你就能找到隧道建立后发送的GET请求,以及附带的Authorization头。 - 本地抓包验证:用Wireshark或tcpdump等工具在本地抓包,过滤目标服务器的流量,就能看到完整的HTTPS请求内容(注意HTTPS需要解密才能看到明文头,或者可以临时换成HTTP站点测试)。
额外提示
如果是代理服务器需要认证,你应该用--proxy-user <user:pass>参数来设置代理的认证信息,而不是把Authorization头加到主请求里。不过从你的日志来看,代理已经成功帮你建立了隧道,所以这应该不是你的问题。
内容的提问来源于stack exchange,提问作者wawanopoulos
相关产品推荐
相关产品推荐

