如何在 CURL 重定向上传递 Cookie?

2022-08-30 18:21:47

想象一下下面的场景:我打开一个 CURL 连接,并通过 POST 传递一些 XML 登录数据。服务器回答302重定向,其中设置了会话cookie并将我重定向到下面的“欢迎”页面。如果我启用 FOLLOWLOCATION,则在重定向页面上设置的 Cookie 将丢失,欢迎页面将失败,并显示“会话已过期”消息。如果我禁用 FOLLOWLOCATION,我不会(显然)被重定向,并得到一个 HTML 页面,其中包含“该页面已移动到另一个位置”,其中包含一个链接,该链接将我引导到欢迎页面。这在设置cookie时有效,但我需要按照重定向直接转到欢迎页面。

那么,如何维护 Cookie 以便正确设置它们呢?

这是我到目前为止的代码:

$ch = curl_init('https://www.example.com/login');

curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, '<some xml data>');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: text/xml; charset=UTF-8"));

curl_exec($ch);
curl_close($ch)

感谢您的任何帮助! ;


答案 1

这是一个老问题,但我也有同样的问题,所以谷歌把我带到了这里。最后,我设法解决了它。通过使用curl_setopt传递空字符串 “” 来设置CURLOPT_COOKIEFILE将解决问题:

curl_setopt($ch, CURLOPT_COOKIEFILE, "");

请参阅 http://curl.haxx.se/libcurl/c/curl_easy_setopt.html 部分CURLOPT_COOKIEFILE


答案 2

要指示 curl 会话上的 php 使用 cookie,您应该设置两个选项:

curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');// set where cookies will be stored
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');// from where it will get cookies

因此,每个 cookie 都将附加在CURLOPT_COOKIEJAR上,并且这些 cookie 将通过设置CURLOPT_COOKIEFILE


推荐