由于某种原因,我的curl调用非常慢。下面是我使用的代码。
$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);
执行这段代码平均需要250ms,但是当我在浏览器中打开url时,Firebug说只需要80ms。
是我做错了什么吗?或者这是与PHP Curl相关的开销。
这是对
curl_exec
那就占用了所有的时间。
最新消息:
所以在我发布这个之后我发现如果我设置了curl选项
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
它会显著减慢
curl_exec
帖子数据可能是任何东西,它会减慢它。
即使我集
curl_setopt($ch, CURLOPT_POST, false);
它很慢。
我将尝试通过将参数作为查询字符串添加到URI来解决这个问题。
第二次更新:
确认如果我只是使用GET调用URI并将参数作为查询字符串传递,这比使用POST并将参数放在主体中要快得多。
8条答案
按热度按时间7y4bm7vi1#
CURL在DNS查找时遇到一些问题。请尝试使用IP地址而不是域名。
rbpvctlc2#
Curl能够准确地指出每个片段所用的时间以及速度慢的地方(名称查找、连接、传输时间)。
如果curl很慢,通常不是PHP代码,它几乎总是与网络有关。
dz6r00yl3#
试试这个
bvk5enib4#
添加“curl_setopt($ch,CURLOPT_POSTREDIR,CURL_REDIR_POST_ALL);“在这里解决。这个解决方案有问题吗?
ohtdti5x5#
我刚刚通过***删除***以下两个选项解决了这个问题:
不知怎么的,在我正在抓取的网站上,POST请求超过了整整十秒。如果是GET,它不到一秒。
因此...在我的执行Curl请求的 Package 函数中,现在只有在
$postData
中有内容时才设置这两个选项crcmnpdw6#
我刚刚经历了一个巨大的加速通过压缩。通过添加
Accept-Encoding
头到“gzip,deflate”,或只是到所有格式的Curl支持,我的~ 200 MB下载花了6秒,而不是20秒:备注:
CURLOPT_ENCODING
requires Curl 7.10+ppcbkaq57#
php中的curl函数直接使用 *nix systems下的curl命令行工具。
因此,它实际上只取决于网络速度,因为一般来说curl本身比web浏览器快得多,因为它(默认情况下)不加载任何额外的数据,如网站的图片,样式表等。
可能你没有意识到,你测试php脚本的服务器的网络性能要比你测试浏览器的本地计算机差很多,因此这两个测量结果并不具有可比性.
6rvt4ljy8#
一般来说,这是可以接受的,当你正在加载内容或张贴到较慢的世界结束。curl调用是直接成比例的,你的网络速度和吞吐量的网络服务器