某个自留地 - 网课
type: channel
link: https://www.miaoxiansen.cn/tag/%E7%BD%91%E8%AF%BE/
items: php使用curl设置超时的重要性

php使用curl设置超时的重要性
type: item
date: 2020-04-10T17:46:00+08:00
description: 转载：https://phpquan.com/lamp/php/php-curl-timeout/这段时间在折腾网课查询，用PHP写了个爬虫程序，但是经常在公众号返回空白。程序是用的curl方式进行抓取，后来设置了 CURLOPT_TIMEOUT 参数就没有出现这个问题了平常如果测试curl都直接设置了url就直接执行了。curl功能还是很强大的，如果线上使用最好还是把 所有参数都设置一遍，还可以设置毫秒级超时最后分享一段 curl 方法function http_request($URI, $isHearder = false, $post = false) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $URI); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 60); //单位 秒，也可以使用 #curl_setopt($ch, CURLOPT_NOSIGNAL, 1); //注意，毫秒超时一定要设置这个 #curl_setopt($ch, CURLOPT_TIMEOUT_MS, 200); //超时毫秒，cURL 7.16.2中被加入。从PHP 5.2.3起可使用 curl_setopt($ch, CURLOPT_HEADER, $isHearder); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36'); curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__)."/tmp.cookie"); curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__)."/tmp.cookie"); if(strpos($URI, 'https') === 0){ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); } if($post){ curl_setopt ($ch, CURLOPT_POST, 1); curl_setopt ($ch, CURLOPT_POSTFIELDS, $post); } $result = curl_exec($ch); curl_close($ch); return $result; } 下面是在csdn看到的，关联一下 https://blog.csdn.net/sd19871122/article/details/80027007PHP cURL 的超时设置有两个 CURLOPT_CONNECTTIMEOUT 和 CURLOPT_TIMEOUT，他们的区别是：CURLOPT_CONNECTTIMEOUT 用来告诉 PHP在成功连接服务器前等待多久（连接成功之后就会开始缓冲输出），这个参数是为了应对目标服务器的过载，下线，或者崩溃等可能状况。CURLOPT_TIMEOUT 用来告诉成功 PHP从服务器接收缓冲完成前需要等待多长时间，如果目标是个巨大的文件，生成内容速度过慢或者链路速度过慢，这个参数就会很有用。 PS爬去的时候只加了CURLOPT_CONNECTTIMEOUT 经常会卡死 使用 cURL 下载 MP3文件是一个对开发人员来说不错的例子，CURLOPT_CONNECTTIMEOUT可以设置为10秒，标识如果服务器10秒内没有响应，脚本就会断开连接，CURLOPT_TIMEOUT可以设置为100秒，如果MP3文件100秒内没有下载完成，脚本将会断开连接。需要注意的是：CURLOPT_TIMEOUT 默认为0，意思是永远不会断开链接。所以不设置的话，可能因为链接太慢，会把 HTTP 资源用完。在 WordPress 中，wp_http 类，这两个值是一样的，默认是设置为 5 秒。