cURL post方法没有创建cookie

时间:2012-07-09 07:22:39

标签: php curl

在下面的代码中,我试图发布用户名和密码,但无法使用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代码,任何人都可以建议上面的代码有什么问题。

提前致谢。

2 个答案:

答案 0 :(得分:3)

只有在使用curl_close($ ch)关闭卷曲手柄时才会保存cookiejar。

从手册:

<强> CURLOPT_COOKIEFILE 包含cookie数据的文件的名称。 cookie文件可以是Netscape格式,也可以是转储到文件中的普通HTTP样式的标头。如果名称为空字符串,则不会加载cookie,但仍会启用cookie处理。

<强> CURLOPT_COOKIEJAR 用于在句柄关闭时保存所有内部cookie的文件名,例如在调用curl_close之后。

http://www.php.net/manual/en/function.curl-setopt.php

答案 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);