我正在使用 HTML 登录表单访问应用程序。这在浏览器中有效,但当我尝试使用 curl 进行复制时,我收到“身份验证失败,用户名/密码错误”的提示。我只能有限地访问服务器端(但日志不包含除先前引用的消息之外的任何其他信息)。
使用浏览器:
表单上有 2 个字段,用户名和密码以及一个提交按钮。在 Web 开发人员工具中,提交请求后,在 Request/payload 下,我只看到这 2 个值。
开发人员工具中报告的 ENCODED 字符串长度为 58 个字符。
请求头字段报告的内容长度值为 57 字节。
使用 Curl:
使用该命令复制包含非动态请求头的浏览器请求,认证失败。
curl -v -d "username=$USER" -d "password=$PASS" \
"https://example.com/app/j_spring_security_check" \
--header @extraheadersfile \
--cookie-jar "cookiefile"
有什么不同?
我所看到的浏览器和 Curl 请求之间的唯一区别(除了日期和 cookie 值)是 curl 请求标头报告的内容长度为 55 字节。
(http 协议、方法、用户代理、accept-* 全部匹配)
两种情况下用户名和密码的值均输入正确。
我怀疑问题出在 POST 有效负载上/数据编码方式可能存在一些差异,但我看不出这 57 个字节来自哪里(curl Content-length:55/浏览器 Content-length:57/浏览器有效负载,url 编码为 58 个字符)。