Php 使cURL Cookie在successives cURL\u exec连接中工作

Php 使cURL Cookie在successives cURL\u exec连接中工作,php,curl,web-crawler,Php,Curl,Web Crawler,我正在用cURL和DOM-PHP爬网。网站上有一个产品部分,你可以一页一页地查看所有的产品,也有更简洁的搜索小节,每一页列出9种产品 我需要存储产品所属分部的信息。我从所有子部分URL开始,上面的程序显示了我如何尝试获得子部分的下一个9个产品页面 问题是,由于网络中没有post跟踪,网络使用一些我认为在cookie上的信息进行重定向 例如:在“所有产品”部分,第二个页面的URL如下所示: www.example.com/product/?n=2 任何小节的第一页都有一个唯一的URL,如: www

我正在用cURL和DOM-PHP爬网。网站上有一个产品部分,你可以一页一页地查看所有的产品,也有更简洁的搜索小节,每一页列出9种产品

我需要存储产品所属分部的信息。我从所有子部分URL开始,上面的程序显示了我如何尝试获得子部分的下一个9个产品页面

问题是,由于网络中没有post跟踪,网络使用一些我认为在cookie上的信息进行重定向

例如:在“所有产品”部分,第二个页面的URL如下所示:

www.example.com/product/?n=2

任何小节的第一页都有一个唯一的URL,如:

www.example.com/product/subsection

问题是到下一个小节页面(下9个产品)的链接不正确

www.example.com/product/?n=2

URL与“所有产品”部分相同,但它显示了子部分产品。 问题是我得到的是所有产品页面,而不是子页面

我尝试过饼干,但没有得到明显的效果。有什么建议吗

<?php
    private ckfile;

    public function main()
    {
        $this->ckfile = tempnam ("C:/Web/", "CURLCOOKIE");
        $copy = $this->get_page();

        $next_visit = $this->link_next($copy);
        while($next_visit != false){//it's not last page
            $copy = $this->get_page($next_visit,$get_name($next_visit));
            $next_visit = $this->link_next($copy);
        }
    }

    public function get_page($URL = "http://www.example.com" , $nombre = "example" )
    {       
        $ch = curl_init();
        $options = array(
                        CURLOPT_HTTPHEADER      => array("Accept-Language: es-es,en"),
                        CURLOPT_USERAGENT       => "Googlebot/2.1 (+http://www.google.com/bot.html)",
                        CURLOPT_AUTOREFERER     => true,         // set referer on redirect ,
                        CURLOPT_ENCODING        => "",               //allow all encodings
                        CURLOPT_FOLLOWLOCATION  => true,         // follow redirects
                        CURLOPT_HEADER          => false,               
                        CURLOPT_CONNECTTIMEOUT  => 120,          // timeout on connect 
                        CURLOPT_TIMEOUT         => 120,          // timeout on response 
                        CURLOPT_MAXREDIRS       => 10,           // stop after 10 redirects 
                        CURLOPT_COOKIEFILE      => $this->ckfile,
                        CURLOPT_COOKIEJAR       =>  $this->ckfile,
                        CURLOPT_RETURNTRANSFER  => true,
                        CURLOPT_URL             => $URL
                        );
        curl_setopt_array($ch, $options);

        $g = 'C:/Web/'.$nombre.'.html';
        if(!is_file($g)){
            $fp=fopen ($g, "w");
            curl_setopt ($ch,CURLOPT_FILE, $fp);
            $trash = curl_exec ($ch); // don't browse them       
            fclose($fp); 
        }
        curl_close ($ch);
    return $g;      
    }

    public function link_next($value)
    {
        # function that searches the DOM for a link and returns a well formed URL
            # or returns false if doesn't find one( last page)
    }
?>

要拨打多个电话,请使用curl multi:

$ch = curl_multi_init();
不是


请看这篇文章,以获取一个示例

,我认为这是用于并发调用的。我真的需要它吗?@beerLantern我从来没有使用常规的curl_init连接来处理多个呼叫——如果可以,请更新您的问题。事实上,我更喜欢使用PEAR的HTTP_Request2而不是原始curl库,原因有很多,包括这一点?如果有什么不对劲,我不明白,我的英语不是很好。实际上,我正在执行其他curl_init调用,以确保访问产品不会失败,问题是在下一页访问中,由于cookie失败,我被重定向到下一节。嗯。。。看起来梨子的HTTP_请求2更容易。。。但我现在有种浪费时间扩大规模的感觉。雷,再次感谢你。我使用HTTP_Request2解决了这个问题。我已经做了一个例子,包括我试图获取的页面。
    $ch = curl_init();