在下面的代码中,我试图发布用户名和密码,但无法使用post创建cookie,如果我使用get方法执行相同的操作,则会创建cookie。
$BASEURL="http://localhost/openx/www/api/json/index.php/main/authenticate/";
$POSTFIELDS='username="'.$username.'"&password="'.$password.'"';
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_FAILONERROR, 0);
curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $POSTFIELDS);
curl_setopt($ch, CURLOPT_URL, $BASEURL);
$returned = curl_exec($ch);
curl_getinfo($ ch)返回200 OK http代码,任何人都可以建议上面的代码有什么问题。
提前致谢。
答案 0 :(得分:3)
只有在使用curl_close($ ch)关闭卷曲手柄时才会保存cookiejar。
从手册:
<强> CURLOPT_COOKIEFILE 强> 包含cookie数据的文件的名称。 cookie文件可以是Netscape格式,也可以是转储到文件中的普通HTTP样式的标头。如果名称为空字符串,则不会加载cookie,但仍会启用cookie处理。
<强> CURLOPT_COOKIEJAR 强> 用于在句柄关闭时保存所有内部cookie的文件名,例如在调用curl_close之后。
答案 1 :(得分:0)
我已将代码更改为以下内容,现在正在为我工作。
$ckfile = tempnam ("/tmp/", "CURLCOOKIE");
$BASEURL='http://localhost/openx/www/api/json/index.php/main/authenticate/';
$POSTFIELDS='username='.$username.'&password='.$password.'';
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, "/tmp/cookieFileName");
curl_setopt($ch, CURLOPT_URL,'http://localhost/openx/www/api/json/index.php/main/authenticate/');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $POSTFIELDS);
ob_start(); // prevent any output
$result=curl_exec ($ch); // execute the curl command
ob_end_clean(); // stop preventing output
$result = curl_exec($ch);
curl_close($ch);