php使用curl设置超时的重要性

原文:php使用curl设置超时的重要性

原文:http://phpquan.com/lamp/php/php-curl-timeout/

网站登录不了,原因是没有可用的 PHP 子进程来响应新的请求了。这可能是是由于PHP-curl  没有设置超时时间引起的。

这段时间用PHP写了个爬虫程序,但是经常执行了一段时间后程序就卡住了。
程序是用的curl方式进行抓取,后来设置了 CURLOPT_TIMEOUT 参数就没有出现这个问题了
平常如果测试curl都直接设置了url就直接执行了。
curl功能还是很强大的,如果线上使用最好还是把 所有参数都设置一遍,还可以设置毫秒级超时
最后分享一段 curl 方法


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

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;

原文地址:https://www.cnblogs.com/lonelyxmas/p/10199179.html

时间: 2024-10-24 01:11:55

php使用curl设置超时的重要性的相关文章

curl的超时时间设置

curl的超时时间设置 使用curl时,有两个超时时间:一个是连接超时时间,另一个是数据传输的最大允许时间. 连接超时时间: --connect-timeout 例: curl --connect-timeout 1 "http://localhost/index.html" 出错提示形如: curl: (28) connect() timed out! 不能连接提示如: curl:(7) couldn't connect to host 数据传输的最大允许时间用: -m 例: cur

socket为send和recv设置超时时间

linux和windows下用setsockopt设置SO_SNDTIMEO,SO_RCVTIMEO的参数的一点区别 UDP的socket在某些情况:如对方关闭时,本地可能sendto不出去数据,然后recvfrom就会被阻塞,这时就需要设置 这两个参数的值提高程序质量. linux: struct timeval timeout={3,0};//3s    int ret=setsockopt(sock_fd,SOL_SOCKET,SO_SNDTIMEO,(const char*)&timeo

java测试网络连接是否成功并设置超时时间

/** * 获取RMI接口状态 * * @return "0":服务正常,"1": 连接报错,"2":连接超时 */ @Override public String getRMIJkzt() { final ExecutorService es = Executors.newFixedThreadPool(1); Callable<String> callable = new Callable<String>() {//使

设置超时时间(项目案例仅供参考)

#设置超时时间爬取网页速度相对要快些#encoding:utf8from lxml import etree#xpathimport re#正则import time#时间import requests#传值from selenium import webdriver#通用阅览器from selenium.webdriver.support.ui import WebDriverWait#引用超时模块import random#自定义模块url = '(网址)'driver = webdrive

C# UdpClient 设置超时时间

/********************************************************************** * C# UdpClient 设置超时时间 * 说明: * 网络通信中设置超时时间是常有的时,记录UDP获取.发送超时设置方法. * * 2016-12-8 深圳 南山平山村 曾剑锋 *********************************************************************/ 一.参考文档: 1. Can

设置超时时间

// 设置超时时间 [manager.requestSerializer willChangeValueForKey:@"timeoutInterval"]; manager.requestSerializer.timeoutInterval = 10.f; [manager.requestSerializer didChangeValueForKey:@"timeoutInterval"]; http://www.itjhwd.com/ios-xuexzlzl/

htmlagilitypack 设置超时

htmlagilitypack timeout 设置超时 http://blog.jongallant.com/2012/07/htmlagilitypack-set-timeout.html htmlWeb.PreRequest = request => { request.Timeout = 15000; return true; }; htmlWeb.PreRequest = request => { request.Timeout = 15000; return true; };

为Process.waitFor设置超时

Java中在使用Runtime.getRuntime().exec(command)调用系统命令后 一般会调用Process.waitFor()来等待命令执行结束 获取执行结果 今天一个悲剧的事实证明了 即使只是调用了很简单的脚本命令 在调用Process.waitFor()后同样可能发生无休止或者接近于无休止的阻塞 处理完故障之后痛定思痛 决定在代码中加入超时控制 但是Process.waitFor()本身并不支持超时时间设置 一个方法是改用非阻塞的Process.exitValue()方法

Axis2 客户端调用 设置超时时间

我用的是axis2-1.6.2版本.请看下面的客户端代码: import org.apache.axis2.client.Options; import com.ctis.ta.service.impl.OpenAccountForUnitServiceStub;import com.ctis.ta.service.impl.OpenAccountForUnitServiceStub.OpenAndCheck;import com.ctis.ta.service.impl.OpenAccount