php curl post json 超时

问题描述

本地使用 curl post json 数据经常出现超时,但是用postman没问题,换了一台机器也没问题。

问题出现的环境背景及自己尝试过哪些方法

php版本7.1.25
php curl 扩展信息如下
cURL support => enabled
cURL Information => 7.63.0
Age => 4
Features
AsynchDNS => Yes
CharConv => No
Debug => No
GSS-Negotiate => No
IDN => No
IPv6 => Yes
krb4 => No
Largefile => Yes
libz => Yes
NTLM => Yes
NTLMWB => Yes
SPNEGO => Yes
SSL => Yes
SSPI => No
TLS-SRP => Yes
HTTP2 => Yes
GSSAPI => Yes
KERBEROS5 => Yes
UNIX_SOCKETS => Yes
PSL => No
Protocols => dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, ldaps, pop3, pop3s, rtsp, smb, smbs, smtp, smtps, telnet, tftp
Host => x86_64-apple-darwin18.2.0
SSL Version => OpenSSL/1.0.2q
ZLib Version => 1.2.11

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)
`

    $cacert = getcwd() . '/cacert.pem'; //CA根证书
    $SSL = substr($url, 0, 8) == "https://" ? true : false;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $header = array_merge(array("X-HTTP-Method-Override: $method",'Expect:'),$header);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    if ($SSL && $CA) {
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);   // 只信任CA颁布的证书
        curl_setopt($ch, CURLOPT_CAINFO, $cacert); // CA根证书(用来验证的网站证书是否是CA颁布)
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true); // 检查证书中是否设置域名,并且是否与提供的主机名匹配
    } else if ($SSL && !$CA) {
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 信任任何证书
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false); // 检查证书中是否设置域名
    }
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $method = self::validate_method($method);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);

    if ($data) {
        $data = !is_array($data)?$data:http_build_query($data);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data); //data with URLEncode
    }

    $data = curl_exec($ch);
    if (curl_errno($ch)) {
        return curl_error($ch);
    }
    $ret = self::parse($ch,$data);


    curl_close($ch);


    return $ret;`

你期待的结果是什么?实际看到的错误信息又是什么?

想知道是不是哪个配置导致的。

阅读 978
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题