首页 > 解决方案 > 在命令行上工作时php上的curl连接超时

问题描述

我有一个 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服务器。

标签: phpcurl

解决方案


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

curl_setopt($curl, CURLOPT_TIMEOUT, 120);

您还在 cURL 中添加了很多规则,例如CURLOPT_SSL_VERIFYPEER. 尝试删除这些规则。我注意到在命令行 curl 中,url 没有 https,由于您的规则,这对您的代码不起作用。


推荐阅读