2014-01-16 23 views
2

这可能与通常要求的相反,但实际上是否让cURL请求更慢并使加载过程更长?我搜索了并找不到任何解决方案。谢谢你的帮助!是否有可能减慢PHP cURL请求

+2

通过一些'睡眠()''S IN的组合。可能更好的答案,如果你解释为什么你想要这个 – 2014-01-16 02:28:20

+0

@Dagon我只是想减慢请求,因为它必须在我做其他事情之前启动,但它不能加载,直到其他事情完成,如果这样做感。你能否详细说明你的答案?我会在请求之后或之前将sleep()放在哪里?谢谢! – Grant

+1

不,它真的没有任何意义 - 对不起;( – 2014-01-16 02:42:40

回答

5

尝试 CURLOPT_MAX_RECV_SPEED_LARGE,以转移放慢

curl_setopt($cSlow,CURLOPT_MAX_RECV_SPEED_LARGE,10) 

它将工作只使用PHP 5.4

ps.Sorry穷人enlgish

+1

很好的答案。从PHP的文档 - 如果在传输过程中累计平均下载超过此速度(以每秒字节数计),传输将暂停以保持平均速率小于或等于参数值。默认为无限速._ – madebydavid

+0

@BrenoZan你的英语很好!无论如何,我似乎得到一个错误,说“请求超时”,因为它花了太长时间。无论如何,我可以让它快一点?谢谢 – Grant

+1

您可以将CURLOPT_LOW_SPEED_LIMIT设置为非常低的速度并且CURLOPT_LOW_SPEED_TIME很长一段时间以避免连接中断,但是..'请求超时'似乎是您有一个真正的网络问题。使用CURLOPT_TIMEOUT ..延长时间限制并为您的网络管理员心情愉快.. – BrenoZan

3

您可以在卷曲进度功能添加usleep,如果你真的需要破解一个慢转:

<?php 

/* fast curl */ 
$cFast = curl_init('http://stackoverflow.com/users/2779152/madebydavid'); 
curl_setopt($cFast, CURLOPT_RETURNTRANSFER, true); 

$time = microtime(true); 
$result = curl_exec($cFast); 
echo("fast: ".(microtime(true) - $time)."\n"); 


/* slow curl */ 
$cSlow = curl_init('http://stackoverflow.com/users/2779152/madebydavid'); 
curl_setopt($cSlow, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($cSlow, CURLOPT_NOPROGRESS, false); 
curl_setopt($cSlow, CURLOPT_PROGRESSFUNCTION, function() { 
    usleep(100000); 
    return 0; 
}); 

$time = microtime(true); 
$result = curl_exec($cSlow); 
echo("slow: ".(microtime(true) - $time)."\n"); 

第一个要求是快,第二慢的 - 如果你将它保存为curlFastSlow.php然后运行它,第二个请求应该有一个明显的区别:

$ php -q curlFastSlow.php 
fast: 0.58203315734863 
slow: 1.5010859966278 
+0

不幸的是,它似乎减慢了产生cURL请求的页面,而不是cURL请求本身。 – Grant

+0

@Grant,它为我工作,至少对于上传(即带有附加文件的POST请求),我已经能够减慢上传 – matteo

+0

虽然这是一种破解,但对于那些有PHP版本在5.3和5.4之间。 – matteo