【问题标题】:Cannot enable cookie in php curl无法在 php curl 中启用 cookie
【发布时间】:2009-11-28 20:09:18
【问题描述】:

这是我使用 curl 的代码:

class cURL {
    var $headers;
    var $user_agent;
    var $compression;
    var $cookie_file;
    var $proxy;
    var $process;

    function cURL($cookies = TRUE, $cookie = 'cookies.txt', $compression = 'gzip', $proxy = '') {
        $this->headers [] = 'Connection: Keep-Alive';
        $this->headers [] = 'Content-type: application/x-www-form-urlencoded;charset=UTF-8';
        $this->user_agent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)';
        $this->compression = $compression;
        $this->proxy = $proxy;      

        $this->cookies = $cookies;
        if ($this->cookies == TRUE)
            $this->cookie ( "c:/wamp/www/googlegroups/cookies/".$cookie );

        $this->process = curl_init ();
        curl_setopt ( $this->process, CURLOPT_HTTPHEADER, $this->headers );
        curl_setopt ( $this->process, CURLOPT_USERAGENT, $this->user_agent );

        if ($this->cookies == TRUE)
            curl_setopt ( $this->process, CURLOPT_COOKIEFILE, $this->cookie_file );
        if ($this->cookies == TRUE)
            curl_setopt ( $this->process, CURLOPT_COOKIEJAR, $this->cookie_file );

        curl_setopt ( $this->process, CURLOPT_ENCODING, $this->compression );
        curl_setopt ( $this->process, CURLOPT_TIMEOUT, 30 );
        if ($this->proxy)
            curl_setopt ( $this->process, CURLOPT_PROXY, $this->proxy );
        curl_setopt ( $this->process, CURLOPT_RETURNTRANSFER, 1 );
        curl_setopt ( $this->process, CURLOPT_FOLLOWLOCATION, 1 );
        curl_setopt ( $this->process, CURLOPT_SSL_VERIFYHOST, 0 );
        curl_setopt ( $this->process, CURLOPT_SSL_VERIFYPEER, 0 );
    }

    function __destruct(){
        curl_close ( $this->process );
        unlink($this->cookie_file);
    }

    function cookie($cookie_file) {
        if (file_exists ( $cookie_file )) {
            $this->cookie_file = $cookie_file;
        } else {
            if($fp = fopen ( $cookie_file, 'w' ))
            {
                fclose($fp);
            }
            else $this->error ( 'The cookie file could not be opened. Make sure this directory has the correct permissions' );
            $this->cookie_file = $cookie_file;
        }
    }
    function get($url) {
        curl_setopt ( $this->process, CURLOPT_POST, 0);
        curl_setopt ( $this->process, CURLOPT_URL, $url);
        $return = curl_exec ( $this->process );
        return $return;
    }

 }

$cc = new cURL();
echo $cc->get("http://127.0.0.1/googlegroups/testcookie.php");

这是我以前从未经历过的一种非常奇怪的 curl 故障类型。 这是 testcookie.php 的输出:

您的 Cookie 未启用 浏览器

如果你删除 unlink($this->cookie_file); 会很有趣。从销毁功能中,cookie文件不会被删除,下次运行此脚本时,您将获得

您的浏览器已启用 Cookie

testcookie.php 源代码:

setcookie("test","test");
if (isset ($_COOKIE['test']))
{
    echo "Cookies are enabled on your browser";
}
else
{
    echo "Cookies are <b>NOT</b> enabled on your browser";
}

【问题讨论】:

    标签: php curl


    【解决方案1】:

    我看不出问题出在哪里。 CURL 正在做它应该做的事情。

    setcookie() 在响应头中设置cookie给客户端。 _COOKIE 包含请求标头中的值。如果你删除 cookie 文件,CURL 将无法持久保存你设置的 cookie 值。

    【讨论】:

    • 哇! setcookie() 在给客户端的响应头中设置 cookie。 _COOKIE 包含请求标头中的值。!好点!我没有看到它来了!谢谢
    猜你喜欢
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    • 2011-07-16
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2015-03-13
    相关资源
    最近更新 更多