【发布时间】:2018-04-17 12:44:14
【问题描述】:
目前,我正在使用 PHP CURL 发布数据以调用 API。 我已经实现了 PHP cURL 来将 client_id、client_secret 值发布到我的 API。 CURL 在我的本地服务器上运行,但在我的生产服务器上却抛出错误。
Error: "cURL error (7): Couldn't connect to server".
PHP 版本 5.6.24
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
if($_POST['grant_type'] != "authorization_code")
curl_setopt($ch, CURLOPT_USERPWD, "$client_id:$client_secret");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_PROXYPORT, "443");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_ENCODING, "");
curl_setopt($ch, CURLOPT_USERAGENT, "spider");
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_SSLVERSION, 3);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 600);
curl_setopt($ch, CURLOPT_TIMEOUT, 600);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
$output = curl_exec($ch);
$info = curl_getinfo($ch);
if($errno = curl_errno($ch)) {
$error_message = curl_strerror($errno);
echo "cURL error ({$errno}):\n {$error_message}";
}
curl_close($ch);
【问题讨论】:
-
您的生产服务器可能不允许来自它的连接。尝试网络调试命令(ping、traceroute、telnet、...)进行确认。然后与您的网络人员联系以打开路由,或修改防火墙。或者,如果这是托管的,请验证您正在使用的托管商的使用条款。这个问题很笼统,可以提供任何准确的答案。
-
请发布您的 cURL 配置和 PHP 版本。此外,生产服务器可能会强制执行 SELinux 和 FirewallD。请务必检查您的端口和访问权限。这只是一个开始。您可能没有对本地开发人员实施任何安全措施。
-
请正确检查网址和凭据。
-
您请求端口 443 进行身份验证,但您是否使用端口 443 进行登录?登录端口 80,在安全之前是不安全的吗?如果您尝试删除 CURLOPT_PROXYPORT 会怎样?如果代理在标准端口上运行,则不需要。你检查过 SELinux 和 FirewallD 了吗?如果没有适当的权限/访问权限,这一切都不会起作用。
-
这些是大多数 Linux 发行版中的安全协议。您可以在命令行上输入以下命令检查 SELinux:
getenforce您可以输入以下命令检查 FirewallD:sudo firewall-cmd --state使用man firewall-cmd获得更多选项您运行的是哪种 Linux?