代码之家  ›  专栏  ›  技术社区  ›  symcbean

curl身份验证失败,在浏览器中有效

  •  0
  • symcbean  · 技术社区  · 6 月前

    我正在使用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个字符)。

    1 回复  |  直到 6 月前
        1
  •  0
  •   Gilles Quénot ticktalk    6 月前

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

    你可以这样修改你的代码:

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

    curl -b "cookiefile" -c "cookiefile" .......