gpt4 book ai didi

php - 为什么 CodeIgniter 的 Curl 库比在纯 PHP 中使用 Curl 慢?

转载 作者:可可西里 更新时间:2023-11-01 13:28:31 24 4
gpt4 key购买 nike

最近,我将使用 Curl 的抓取代码移至 CodeIgniter。我正在使用来自 http://philsturgeon.co.uk/code/codeigniter-curl 的 Curl CI 库.我将抓取过程放在一个 Controller 中,然后我发现抓取的执行时间比我用普通 PHP 构建的慢。

CodeIgniter 需要 12 秒才能输出结果,而在普通 PHP 中只需要 6 秒。两者都包括 HTML DOM 解析器的解析过程。

这是我在 CodeIgniter 中的 Curl 代码:

function curl($url, $postdata=false)
{
$agent = "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)";

$this->curl->create($url);
$this->curl->ssl(false);
$options = array(
'URL' => $url,
'HEADER' => 0,
'AUTOREFERER' => true,
'FOLLOWLOCATION' => true,
'TIMEOUT' => 60,
'RETURNTRANSFER' => 1,
'USERAGENT' => $agent,
'COOKIEJAR' => dirname(__FILE__) . "/cookie.txt",
'COOKIEFILE' => dirname(__FILE__) . "/cookie.txt",
);

if($postdata)
{
$this->curl->post($postdata, $options);
}
else
{
$this->curl->options($options);
}

return $this->curl->execute();
}

非 codeigniter(纯 php)代码:

函数 curl($url ,$binary=false,$post=false,$cookie =false){

    $ch = curl_init();

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Accepts all CAs
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 2);

curl_setopt ($ch, CURLOPT_URL, $url );
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_REFERER, $url);
curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);



if($cookie){


$agent = "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)";
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . "/cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . "/cookie.txt");

}


if($binary)
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);


if($post){


foreach($post as $key=>$value)
{
$post_array_string1 .= $key.'='.$value.'&';
}
$post_array_string1 = rtrim($post_array_string1,'&');

//set the url, number of POST vars, POST data

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_array_string1);
}

return curl_exec ($ch);

有谁知道为什么这个 CodeIgniter Curl 比较慢??或者可能是因为 simple_html_dom 解析器??

最佳答案

我不确定我是否知道这个问题的确切答案,但在我广泛使用 Curl 和 CI 时,我对它有一些观察。

  1. 检查 DNS 缓存/查询的状态。

当代码从我的开发桌面上传到托管暂存服务器时,我注意到速度有了显着提高。它被追溯到一个 DNS 问题,该问题通过重新启动堡垒主机得到解决......您有时可以使用 IP 地址而不是主机名来检查这一点。

  1. Phil 的“图书馆”实际上只是一个包装器。

他所做的只是将 CI 风格的函数映射到 PHP Curl 库。几乎没有其他事情发生。我花了一些时间四处闲逛(我忘了为什么),它真的很不起眼。也就是说,很可能会有一些一般的 CI 开销——您可能会看到在另一个类似的框架(Fuel、Kohana、Laravel 等)中发生了什么。

  1. 检查您的反向查找。

某些 API 会在其安全扫描过程中执行反向 DNS 检查。有时主机名或其他 header 在隐藏的配置中设置不当,可能会引起真正的麻烦。

  1. 使用 Chrome 的 Postman 扩展来调试 REST API。

没有评论,太棒了 - https://github.com/a85/POSTMan-Chrome-Extension/wiki并且您可以对“对话”进行精细控制。

关于php - 为什么 CodeIgniter 的 Curl 库比在纯 PHP 中使用 Curl 慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12907234/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com