代码之家  ›  专栏  ›  技术社区  ›  Peter

在命令行上工作时,php上的curl连接超时

  •  0
  • Peter  · 技术社区  · 5 年前

    我有一个php api,我托管在另一个服务器/域中,从另一个服务器使用php curl进行访问,突然它停止了连接,但当我尝试在命令行中访问api时,它会工作。

    <?php 
    $requestPayload  = array(
            'user_id' => API_USER_ID,
            'user_key' => API_KEY, 
            'select_limit' => '*',
    );
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL,"https://example.com/direct/_api/list.php");
    curl_setopt($curl, CURLOPT_FRESH_CONNECT, true);
    curl_setopt($curl, CURLOPT_POST,1);
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
    curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($requestPayload));
    curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($curl, CURLOPT_MAXREDIRS, 10);
    curl_setopt($curl, CURLOPT_TIMEOUT, 120);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)');
    $result = curl_exec($curl);
    $err = curl_error($curl);
    curl_close($curl);
    ?>
    

    上面的代码会给我错误 Http error Failed to connect to example.com port 443: Connection timed out ,但当我在命令中运行url时,它工作正常

    curl -XPOST -d 'user_id=vvcZ....&user_key=T0Z8...&select_limit=*' 'http://example.com/direct/_api/list.php'
    

    我不知道问题是来自发送服务器还是api服务器。

    0 回复  |  直到 5 年前
        1
  •  0
  •   William Carneiro    5 年前

    尝试删除定义连接超时的行:

    curl_setopt($curl, CURLOPT_TIMEOUT, 120);
    

    你也在卷发中加入了很多规则,比如 CURLOPT_SSL_VERIFYPEER . 尝试删除这些规则。我注意到,在命令行curl中,url没有https,由于您的规则,这在您的代码中不起作用。

    推荐文章