出于某种原因,我的卷曲呼叫很慢。这是我使用的代码。
$postData = "test"
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
$result = curl_exec($ch);
执行此代码平均需要250毫秒才能完成。 然而,当我在浏览器中打开网址时,firebug表示它只需要大约80毫秒。
我做错了吗?或者这是与PHP Curl相关的开销。
这是对
的呼吁curl_exec
这一直在占用。
更新:
所以我在发布之后就知道如果我设置了卷曲选项
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
显着减慢
curl_exec
帖子数据可能是任何东西,它会减慢它。
即使我设置了
curl_setopt($ch, CURLOPT_POST, false);
这很慢。
我将尝试通过将参数作为查询字符串添加到URI来解决它。
第二次更新:
确认如果我只使用GET调用URI并传递参数 作为查询字符串,它比使用POST并将参数放在正文中要快得多。
答案 0 :(得分:27)
CURL在DNS查找方面存在一些问题。尝试使用IP地址而不是域名。
答案 1 :(得分:16)
Curl能够准确判断每件作品的长度以及缓慢的位置(名称查找,连接,转移时间)。运行curl_exec后使用curl_getinfo(http://www.php.net/manual/en/function.curl-getinfo.php)。
如果curl很慢,它通常不是PHP代码,它几乎总是与网络相关。
答案 2 :(得分:1)
尝试
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
答案 3 :(得分:1)
添加“ curl_setopt($ ch,CURLOPT_POSTREDIR,CURL_REDIR_POST_ALL);”在这里解决。这个解决方案有问题吗?
答案 4 :(得分:0)
通常在您加载内容或发布到较慢的世界时可以接受。 curl call与您的网络服务器的网络速度和吞吐量成正比
答案 5 :(得分:0)
php中的curl函数直接使用* nix系统下的curl命令行工具。
因此它实际上只取决于网络速度,因为一般来说curl本身比webbrowser快得多,因为它(默认情况下)不会加载任何其他数据,如网站的包含图片,样式表等。
您可能有可能不知道,您测试php脚本的服务器的网络性能比使用浏览器测试的本地计算机更差。因此,两种测量都不具有可比性。
答案 6 :(得分:0)
我刚刚通过删除以下两个选项解决了这个确切的问题:
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
不知何故,在我获取的网站上,POST 请求超过了整整十秒。如果是 GET,则不到一秒。
所以...在我执行 Curl 请求的包装函数中,它现在只在 $postData
中存在某些内容时设置这两个选项