2011-12-18 120 views
1

这是我在这个论坛上的第一个问题,但它帮助我之前找到答案。所以我想用PHP和CURL自动登录到我的账户。Php CURL自动登录

我是PHP的新手,但直到现在,无论何时我需要连接到网页,请发布帖子或获取或关注所有工作的重定向。

问题是,我正在尝试登录的帐户有一个用户名/密码页面,后面跟着一个令人难忘的单词页面,其中我必须从我难忘的单词中输入一些字符。

现在我设法通过第一页,并获得第二页,我必须输入令人难忘的单词字符,但是当我试图做到这一点(所以第二篇文章)不工作 - 我被重定向到登录再次。

现在我试图调查,看看有什么问题,但我仍然不知道为什么不工作。我观察到JSESSIONID是通过服务器在正常登录时传递的,而当我运行我的脚本时,JSESSIONID发生更改。我正在使用:

curl_setopt($this->curl, CURLOPT_COOKIEFILE, 'cookie.txt'); 
curl_setopt($this->curl, CURLOPT_COOKIEJAR, 'cookie.txt'); 

但是,当我检查文件它是空的,它并没有被修改,因为它被创建。是的,该文件可以被写入(它有777个权限)。

我不知道这是问题还是别的,但我寻找答案,我尝试了不同的东西,没有任何工作。所以任何想法将不胜感激。

谢谢

+0

你绝对100%确认你的脚本是从你认为它的工作目录运行吗?仔细检查['getcwd()'](http://php.net/manual/en/function.getcwd.php),并确保该文件真的可以通过PHP写入'var_dump(is_writable('cookie.txt “));'。您还应该执行'curl_setopt($ this-> curl,CURLOPT_HEADER,TRUE);'获取响应头并确认您确实收到了一些cookie。 – DaveRandom 2011-12-18 20:54:53

+0

我已经运行您的命令进行测试,如果它是可写的,它是。它返回true。关于头文件,我确信当我向服务器发送请求时,会使用一些cookie,因为我使用的是Firefox中的Live Http Headers插件。文件大小仍为0 B,并且创建它时修改的最后日期。如果我打印标题,当我做secons发布时,我得到:Array([0] => HTTP/1.1 302 Found [1] => Set-Cookie:iApply-PROD-COOKIE = R1294003214 – user1104866 2011-12-18 21:35:47

+0

所以@DaveRandom如何当我正常登录时,JSESSIONID在这里保持不变,当我做第二次POST时,就像没有找到它,它会生成一个新的(比如正在创建另一个新请求)。 – user1104866 2011-12-18 21:58:51

回答

0

这里是一个我可以确认作品的例子。它向您显示cookieJar文件的完整路径,并从脚本的执行位置获取完整路径,因此它应该适用于大多数操作系统。

<?PHP 
$cookiepath = __DIR__.DIRECTORY_SEPARATOR.'cookieJar.txt'; 
echo "Saving cookies to: $cookiepath\n"; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://www.google.com"); 
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/11.0'); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiepath); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiepath); 
curl_setopt($ch, CURLOPT_HEADER ,1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER ,1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION ,1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
$data = curl_exec($ch); 
?>