0

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

提前致谢。

4

2 回答 2

3

cookiejar 仅在您使用 curl_close($ch) 关闭 curl 句柄时保存。

从手册:

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

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

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

于 2012-07-09T07:36:40.633 回答
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);
于 2012-07-09T10:35:17.563 回答