curl 身份验证失败,在浏览器中工作

问题描述 投票:0回答:1

我正在使用 HTML 登录表单来访问应用程序。这在浏览器中有效,但是当我尝试使用curl复制时,我得到“身份验证失败,用户名/密码错误”。我对服务器端的访问权限有限(但日志除了之前引用的消息之外不包含任何其他信息)。

使用浏览器:

表单上有 2 个字段,用户名和密码以及提交按钮。 在 Web 开发人员工具中,提交请求后,在请求/有效负载下,我只看到 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"

有什么不同?

我在浏览器和 Curl 请求之间看到的唯一区别(日期和 cookie 值除外)是,curl 请求标头报告的内容长度为 55 个字节。

(http 协议、方法、用户代理、accept-* 全部匹配)

在这两种情况下,用户名和密码的值均输入正确。

我怀疑问题出在 POST 负载上/数据的编码方式可能存在一些差异,但我看不到 57 个字节来自哪里(curl Content-length: 55 / browser Content-length : 57 / 浏览器负载,url 编码为 58 个字符)。

http curl
1个回答
0
投票

通常,处理cookie时,需要在同一个文件中同时启用写入和读取。

您可以像这样修复代码:

curl --cookie-jar "cookiefile" --cookie "cookiefile" .......

curl -b "cookiefile" -c "cookiefile" .......
© www.soinside.com 2019 - 2024. All rights reserved.