PHP curl 缓慢度

knpiaxh1  于 2022-11-13  发布在  PHP
关注(0)|答案(8)|浏览(163)

由于某种原因,我的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并将参数放在主体中要快得多。

7y4bm7vi

7y4bm7vi1#

CURL在DNS查找时遇到一些问题。请尝试使用IP地址而不是域名。

rbpvctlc

rbpvctlc2#

Curl能够准确地指出每个片段所用的时间以及速度慢的地方(名称查找、连接、传输时间)。
如果curl很慢,通常不是PHP代码,它几乎总是与网络有关。

dz6r00yl

dz6r00yl3#

试试这个

curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
bvk5enib

bvk5enib4#

添加“curl_setopt($ch,CURLOPT_POSTREDIR,CURL_REDIR_POST_ALL);“在这里解决。这个解决方案有问题吗?

ohtdti5x

ohtdti5x5#

我刚刚通过***删除***以下两个选项解决了这个问题:

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);

不知怎么的,在我正在抓取的网站上,POST请求超过了整整十秒。如果是GET,它不到一秒。
因此...在我的执行Curl请求的 Package 函数中,现在只有在$postData中有内容时才设置这两个选项

crcmnpdw

crcmnpdw6#

我刚刚经历了一个巨大的加速通过压缩。通过添加Accept-Encoding头到“gzip,deflate”,或只是到所有格式的Curl支持,我的~ 200 MB下载花了6秒,而不是20秒:

curl_setopt($ch, CURLOPT_ENCODING, '');

备注:

  • 如果设置了空字符串“",则发送包含所有支持的编码类型的标头。
  • 您甚至不必关心下载后的解压缩,因为这是由Curl内部完成的。
  • CURLOPT_ENCODINGrequires Curl 7.10+
ppcbkaq5

ppcbkaq57#

php中的curl函数直接使用 *nix systems下的curl命令行工具。
因此,它实际上只取决于网络速度,因为一般来说curl本身比web浏览器快得多,因为它(默认情况下)不加载任何额外的数据,如网站的图片,样式表等。
可能你没有意识到,你测试php脚本的服务器的网络性能要比你测试浏览器的本地计算机差很多,因此这两个测量结果并不具有可比性.

6rvt4ljy

6rvt4ljy8#

一般来说,这是可以接受的,当你正在加载内容或张贴到较慢的世界结束。curl调用是直接成比例的,你的网络速度和吞吐量的网络服务器

相关问题