Php 加快cURL页面登录和抓取速度

Php 加快cURL页面登录和抓取速度,php,curl,Php,Curl,我有一个函数,可以登录到一个站点并在下一页中搜索字符串。这个过程目前需要10秒,但我想看看我是否可以做些什么来加速它。我想知道是否有可能在客户端会话中保持curl登录,或者更好地搜索文档 public function curlLogin($url, $post_values, $cookieJar) { $timeout = 30; $curl_connection = curl_init(); curl_setopt($curl_conne

我有一个函数,可以登录到一个站点并在下一页中搜索字符串。这个过程目前需要10秒,但我想看看我是否可以做些什么来加速它。我想知道是否有可能在客户端会话中保持curl登录,或者更好地搜索文档

public function curlLogin($url, $post_values, $cookieJar) {

        $timeout = 30;

        $curl_connection = curl_init();
        curl_setopt($curl_connection, CURLOPT_URL, $url);
        curl_setopt($curl_connection, CURLOPT_TIMEOUT, $timeout);
        curl_setopt($curl_connection, CURLOPT_USERAGENT,"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
        curl_setopt($curl_connection, CURLOPT_COOKIEJAR, $cookieJar);
        curl_setopt($curl_connection, CURLOPT_COOKIEFILE, $cookieJar);
        curl_setopt($curl_connection, CURLOPT_COOKIESESSION, 0);
        curl_setopt($curl_connection, CURLOPT_HEADER, 1);
        curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($curl_connection, CURLOPT_POST, 1);
        curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_values);
        curl_setopt($curl_connection, CURLOPT_HTTPHEADER,
        array("Content-type: application/x-www-form-urlencoded"));
        curl_exec($curl_connection);
        return $curl_connection;

    }

    public function curlPost($curl_connection, $url, $post_values, $cookieJar) {

        $timeout = 30;

        curl_setopt($curl_connection, CURLOPT_URL, $url);
        curl_setopt($curl_connection, CURLOPT_TIMEOUT, $timeout);
        curl_setopt($curl_connection, CURLOPT_USERAGENT,"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
        curl_setopt($curl_connection, CURLOPT_COOKIEJAR, $cookieJar);
        curl_setopt($curl_connection, CURLOPT_COOKIEFILE, $cookieJar);
        curl_setopt($curl_connection, CURLOPT_COOKIESESSION, 0);
        curl_setopt($curl_connection, CURLOPT_HEADER, 1);
        curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($curl_connection, CURLOPT_POST, 1);
        curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_values);
        curl_setopt($curl_connection, CURLOPT_HTTPHEADER,
        array("Content-type: application/x-www-form-urlencoded"));
        $result = curl_exec($curl_connection);
        return $result;

    }

$cookieJar = tempnam ("/tmp", "CURLCOOKIE");

$curl_connection = $this->curlLogin($login_url, $post_values, $cookieJar);

$result = $this->curlPost($curl_connection, $next_url, $params, $cookieJar);

if (strpos($result,'string 1') > 0) {
    $success = true;
    $message = 'string 1 is present';
}else if (strpos($result,'string 2') > 0){
    $success = false;
    $message = 'string 2 is present';
}else if (strpos($result,'string 3') > 0){
    $success = false;
    $message = 'string 3 is present';
}else{
    $success = false;
    $message = 'None of the above strings are present.';
}

curl_close($curl_connection);
unlink($cookieJar);

通过重用
cookiejar
,可以避免每次登录

在包含脚本的目录中创建名为
cookies.txt
的文件,并分配:
$cookieJar='cookies.txt'

第一次运行脚本后,只需删除对
curlLogin()
函数的调用,您的
curlPost()
函数应该正确使用cookie并返回数据,就像您登录一样

请记住,
CURLOPT_-COOKIEFILE
用于指定从何处“读取”cookies,而
CURLOPT_-COOKIEJAR
用于指定写入响应cookies的位置


因此,您可以在
curlPost()
函数中不使用
CURLOPT_COOKIEJAR

在firefox中加载这些页面时,如果使用firebug对其进行监控,页面加载时间会是多少?搜索子字符串比其他子字符串快得多,记住,每个Curl操作都是一个单独的HTTP请求,你真的必须这样设计登录吗?您登录时至少运行3个HTTP请求。通过firebug加载页面需要10秒。其他答案说使用curl_multi,但我可以访问同一个站点,我必须等到登录成功后才能抓取其他页面。赫尔曼-它到底在哪里做这3个请求?