记一次php curl导致的故障

情景描述

本地和alpha环境curl请求第三方接口正常
beta环境curl请求失败

代码如下

public static function getCurl($url, $type = ‘get‘, $data = ‘‘, $decode = true, $header = array())
    {
        $ch = curl_init();    // 初始化CURL句柄
        curl_setopt($ch, CURLOPT_TIMEOUT, 5);//设置超时3秒钟
        curl_setopt($ch, CURLOPT_URL, $url); //设置请求的URL
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 设为TRUE把curl_exec()结果转化为字串,而不是直接输出
        if (strtolower($type) == ‘post‘) {
            curl_setopt($ch, CURLOPT_POST, 1); //启用POST提交
            is_array($data) && $data = http_build_query($data);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data); //设置POST提交的字符串
        }
        if (!empty($header)) {
            curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
        }

        $document = curl_exec($ch); //执行预定义的CURL
        $info     = curl_getinfo($ch, CURLINFO_HTTP_CODE); //得到返回信息的特性
        curl_close($ch);
        if ($info >= 200 && $info < 300) {
            if ($decode) {
                return json_decode($document, true);
            }
            return $document;
        } else {
            return array("result" => "fail", "cause" => $document);
        }
    }

解决方案

强制使用IPV4请求

curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);

curl配置说明:
http://php.net/manual/zh/function.curl-setopt.php

补充

curl 命令行进行请求,-4代表使用IPV4

curl -4 url -X POST -H "Content-Type:application/json" -d ‘{"app_id":"ceshi","secret_key":"123456"}‘

原文地址:http://blog.51cto.com/13990437/2344025

时间: 2024-10-09 08:53:34

记一次php curl导致的故障的相关文章

【实习记】2014-08-18使用curl排错http头的content-length

总结一,用curl排错Content-Length设置错误,误导了客户端. 访问/cgi-bin/txproj_list时,firebug显示总是不多不少15秒,调试其他问题时郁闷. firebug没有具体延时15秒的提示,一直百思不得其解. 直到我使用curl [email protected]:~$ curl http://192.168.56.101:8080/cgi-bin/txproj_list -b "name=rich; token=1333500450rich; id=10000

哪些情况会导致磁盘阵列故障,故障后如何恢复数据

现在数据访问的性能及数据存储的安全性是企业信息化应用环境中最为关心的问题.目前,RAID技术已广泛地应用于服务器附加存储.网络存储及Internet存储的领域上,以提高数据访问的性能并增强数据的安全有效.而RAID是最重要用途是数据存储和备份RAID磁盘阵列因为其良好的容错能力以及对多块硬盘优势的充分发挥,得到越来越广泛的应用,特别是满足企业需要储存大量数据的需求.磁盘阵列故障会导致数据丢失给企业带来严重的损失,那么在故障发生后如何进行数据恢复呢?下面给大家详细介绍. 以下情况容易导致 RAID

vsan存储服务器非正常关机导致虚拟机故障解决方法

Vsan是一种以vSphere内核为基础进行开发.可扩展的分布式存储架构,Vsan通过在vSphere集群主机当中安装闪存和硬盘来构建vsan存储层,这些设备由vsan进行控制和管理,vsan形成一个供vSphere集群使用的统一共享存储层.vSphere提供了HA功能,保证单台主机故障后业务可以在其他的主机上运行,同一个虚拟机的同一份数据,必须保存在不同主机上,也允许有主机故障.但是如果多台主机同时故障的话,就会导致整个vsan存储崩溃,一般突然断电或者非正常关机就会导致虚拟机故障,下面就是非

vagrant故障记--升级虚拟机linux内核导致无法挂载共享文件夹

i'm new to use vagrant,今天升级了下vbox里的ubuntu12.04内核,结果vagrant reload后出现报错. Failed to mount folders in Linux guest. This is usually because the "vboxsf" file system is not available. Please verify that the guest additions are properly installed in t

php redis2.2.7扩展bug导致段故障与重新声明类bug

今日工作由于重新安装debian系统后php环境也是后编译的,没有安装redis扩展. 从官网下载了一个redis 2.2.8编译通过安装,php -m可以看到一切ok 运行程序总是提供RedisCluster不能从新声明仔细检查只有一个include,我们自己的RedisCluster类,然后我把这行注释掉不提示这个错误了,提示RedisCluster必须有一个参数,随便传入一个参数进去,运行出现段故障了. 从官网下了一个redis 2.2.7从新编译,一切正常. 不知是不是reids 2.2

mysql5.5 物理删除binlog文件导致的故障

故障现象: 中午12点多,一套主从集群的主库因为没有配置大页内存,发布时导致OOM,MYSQL实例重启了,然后MHA发生了切换.切换过程正常.切换后需要把原master配置成新master的slave,在manager.log文件里面找到change master to ....命令,执行后发现复制状态一直停留在connectiong .名称定:OOM的是M1,挂掉后顶替的是S1. mysql> show slave status\G *************************** 1.

一次故障记录keepalived配置疏忽导致的故障

负载均衡keepalived+lvs 负载nginx 应用tomcat nginx负载通过公网,每一台nginx都负载了多聊链路到后端应用,突然部分客户无法访问业务,负载均衡没有问题,部分nginx服务器到后端应用超时,nginx日志中报出错误:但是keepalived配置为 TCP_CHECK {            connect_timeout 3             nb_get_retry 3            delay_before_retry 3            

记一次自动恢复的支付故障

故障描述 作为一个老牌OTA公司,公司早些年订单主要来源是PC网站和呼叫中心.我在入职公司大约半年后,遇到一次非常诡异的故障.有一天早上,大概也是这个季节,阳光明媚,程序猿刚起床,洗洗涮涮,准备去迎接初恋般的工作日,却突然收到一大堆报警,线上消息队列大量积压:当然,我还是一如既往的非常勤奋地在9点之前就到公司的:但是作为一名新员工,环视四周,组内其他员工都还没到公司,运维也都在路上,故障就这样突然降临了.我赶紧开机登录堡垒机,连接线上机器,tail 错误日志.但是线上10几个系统,我看了好几个系

一次arp防护配置错误导致的故障

故障描述,客户那里能够获得ip地址和dns等信息,但上不了网.三层核心是思科6509,二层设备是华三5130. 处理过程,由于dhcp信息能够获得证明二层是通的,cisco6509上分配ip等信息,查看相关vlan和网关信息,查看其他三层设备能看到此网段的路由信息,三层也没问题,详细查看vlan信息,发现ip arp inspection vlan 509 829,其中vlan829的arp防护是其他网管填上的,cisco解决arp欺骗使用dhcp snooping和ARP inspection