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