cUrl保持跟随位置标题

时间:2013-11-16 13:35:40

标签: php redirect curl

好的,我使用cUrl将2个字段发布到网址,此页面会检查我的帖子字段,并根据它们返回给我cookie。然而,在我甚至可以阅读cookie之前,我已经将其重定向到另一页 我尝试设置_FOLLOWLOCATION,0但我仍然被重定向。对此有何想法?
代码:

$headers[] = "Accept: */*";
$headers[] = "Connection: Keep-Alive";
$headers[] = "Content-type: application/x-www-form-urlencoded;charset=UTF-8";

$fields_string = "login_url=/login.do?school=windesheim";
$fields_string=rtrim($fields_string, "&");
$cSession = curl_init(); 
$tmpfname = dirname(__FILE__).'/cookie2.txt';
curl_setopt($cSession, CURLOPT_REFERER,  "https://website.com/login.do?error=nomandant");
curl_setopt($cSession, CURLOPT_HTTPHEADER,  $headers)
curl_setopt($cSession, CURLOPT_COOKIEFILE, $tmpfname);
curl_setopt($cSession, CURLOPT_COOKIEJAR, $tmpfname);
curl_setopt($cSession,CURLOPT_URL,"https://website.com/j_spring_security_check");
curl_setopt($cSession,CURLOPT_RETURNTRANSFER,true);
curl_setopt($cSession, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($cSession, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($cSession, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($cSession,CURLOPT_HEADER, true); 
curl_setopt ($cSession, CURLOPT_POST, true);
curl_setopt ($cSession, CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($cSession,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
$result=curl_exec($cSession);
curl_close($cSession);
echo htmlspecialchars($result);

如果我打印标题,则说明位置:https://website.com/login.do?error=nomandant

所以我转到此页面,我无法获取cookie,因为我被重定向到下一页,然后将我重定向回第一页,因为我没有设置cookie。   我想进入第一页,不要重定向,并从标题中读取cookie 为什么即使将followlocation设置为0 / false,我也被重定向?

更新:
当我在我的浏览器在website.com并且我在postfield中输入Windesheim并将其发布时将其发布到/ j_spring_security_check

browser network inspector

所以我尝试使用cUrl使用上面的代码来模拟这个(更新了更多信息)。但输出只是:

HTTP/1.1 302 Found Connection: Keep-Alive Content-Length: 0 
Date: Sat, 16 Nov 2013 14:28:33 GMT 
Location: https://website.com/login.do?error=nomandant Server: Apache-Coyote/1.1

预期结果类似于上图中的响应标题 因此,将我重定向到

会出现问题
/login.do?error=nomandant 

而不是

/index.do;jsessionid=etc.

但我无法弄清楚我做错了什么,因为只发布了2个字段,我将它们都包含在我的代码中。

1 个答案:

答案 0 :(得分:1)

首先,请注意,在使用curl_close关闭会话后,您将能够阅读Cookie。

请参阅http://php.net/manual/en/function.curl-setopt.php

从你说的实际上你被服务器重定向到另一个位置,但curl 没有关注那个位置。这就是您看到带有重定向的标头的原因。

curl表现得如预期!

如果您将其设置为关注新位置,则会看到黑客和新位置的页面 https://website.com/login.do?error=nomandant

根据您发布到网址的数据,服务器希望将您发送回https://website.com/login.do?error=nomandant

如果这不是您所期望的,那么您随请求发送的Cookie不好(例如缺少会话值...)或者您发布的数据错误。