Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么Curl会比web浏览器慢?_Php_Windows_Curl_Windows Xp - Fatal编程技术网

Php 为什么Curl会比web浏览器慢?

Php 为什么Curl会比web浏览器慢?,php,windows,curl,windows-xp,Php,Windows,Curl,Windows Xp,我使用一个GET和另一个POST请求来访问一个网站(第一个请求是设置cookie)。我正在一个带有virtualbox的WinXP虚拟机上进行测试,使用的是来自wampserver.com的wamp。这两个请求需要10到18秒(使用curl),但如果我直接通过同一虚拟机中的webbrowser发出这些请求,网站只需几秒钟即可加载,并检索所有图像、css等 是什么导致curl工作得这么慢?有没有办法修复它?Curl可能正在尝试反向DNS服务器,但由于无法修复,它只是挂在那里等待超时 如果IPV6给

我使用一个GET和另一个POST请求来访问一个网站(第一个请求是设置cookie)。我正在一个带有virtualbox的WinXP虚拟机上进行测试,使用的是来自wampserver.com的wamp。这两个请求需要10到18秒(使用curl),但如果我直接通过同一虚拟机中的webbrowser发出这些请求,网站只需几秒钟即可加载,并检索所有图像、css等


是什么导致curl工作得这么慢?有没有办法修复它?

Curl可能正在尝试反向DNS服务器,但由于无法修复,它只是挂在那里等待超时


如果IPV6给出了超时,您可以尝试
CURL\u IPRESOLVE\u V4
完全绕过它。这实际上取决于您的计算机配置,更重要的是服务器故障。

检查您的web服务器日志,并尝试查找来自普通web浏览器的请求与来自curl的请求之间的差异,这可能是由于IPv6

尝试添加

curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );

我在本地web服务器上遇到了这个问题。我可以通过添加

::1 localhost
/etc/hosts/
文件


这是我使用curl命令面临的相同问题

如上所述,强制只使用ipv4的dns查找修复了此问题

curl-4$url
#又好又快


(我的主机文件中已经有了
::1 localhost
,但这没有帮助)。

可能是您的浏览器缓存了一些图像等。清空浏览器缓存,然后重试测试…尝试了,加载速度仍然比curl快。有没有办法禁用反向dns?我尝试使用ip而不是域(网站使用ip加载很好),但curl在这两个请求上仍然需要14秒。您可以直接在
主机
文件中输入地址,也可以尝试强制使用IPv4,看看是否有什么不同。我使用了fsockopen,这需要30多分钟。我们是否必须像fsockopen('xxx.xxx.xxx.xxx',80)那样使用它,而不是在那里给出域名。。。标题中的主机名为:hostname.com。。不是吗?不管怎样,让我试试弗兰基的评论。@jarkam但从你的测试中,你能看出它是否与DNS有关吗?按照简单的步骤,尽量消除可能出现的情况。因此,您的意思是检查浏览器发送的标题,以便在curl中使用相同的标题可以使web服务器了解更多信息。我也有同样的问题。我正在通过firefox访问服务器。它装载得更快。但当我使用fsockopen('sitename.com')和firefox一样的头文件时,它的加载速度并不快。大约需要30秒或更长时间。@Jayapal Chandran它总是需要更多时间,如果你计时,它总是需要大约相同的时间。这是反向DNS超时,然后是真正的服务器响应(与超时相比,这并不重要)。实际上是30多秒,就像60秒。无论如何我所做的是在hosts文件中添加了socket\u create、socket\u connect、socket\u read、socket\u write函数,方法是指定ip。它工作得很快。在这里,我感到困惑是因为在主机文件中添加了ip还是直接提供了ip。我通过从主机中删除ip并再次使用fsockopen进行检查。这一次它运行得非常快。这以前从未发生过。完全搞糊涂了。但它正在发挥作用。会有什么影响?Jayapal,我使用Windows是因为我不喜欢在我的主操作系统上安装Web服务器,而我只在WinXP虚拟机上安装了一个Web服务器。现在我在Linux虚拟机上安装了一个Web服务器(backtrack 4),curl的工作速度快了8倍。如果您在Windows上遇到此问题,您应该尝试在Linux上运行脚本并比较结果。更新:添加自定义头以精确模拟firefox发送的内容,加载时间减少了约50%。