带有 Java 会话 cookie 的 CURL 在 Linux 上工作但在 Windows 上失败

问题描述

我有一段代码可以模拟登录到某个 java servlet,获取 JSESSIONID 并在使用后将其分配给其他所有请求:

curl_setopt($curl,CURLOPT_COOKIE,$cookie);

第一个请求获取登录表单并生成 cookie,然后我使用新生成的 cookie 发出另一个请求以获取验证码图像(有自己的系统并且很容易获取),并使用来自用户。这是可行的,但是除了登录之外进行任何其他操作会完全终止我与该 servlet 的会话(不是我丢失了 cookie,而是会话突然没有登录,就像它已过期一样)。

奇怪的是,这是 Windows Server 2019 机器上的行为,但它在 Linux 机器上完美运行,并且发送的数据包在两者上完全相同。

我尝试将 CURLOPT_HTTPAUTH 从 CURLAUTH_BASIC 更改为其他所有值,但均无效。 PHPInfo 显示我的 Windows 机器有 curl 7.70.0 (PHP 7.3.27),我的 Linux 机器有 curl 7.19.7 (PHP 7.3.25)。

WINDOWS

LINUX

我尝试在同一台 Windows 机器上的 Web 浏览器上执行这些请求,但未能执行此操作并且可以正常工作,因此这与 IP 黑名单或类似问题无关,问题一定与 curl 相关。这里可能有什么问题?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)