首页 > 解决方案 > 从 https 启动 curl

问题描述

我正在建立一个 API 连接,并且服务器要求调用是从 https 服务器进行的,但我找不到如何使用 https 而不是普通的 http 来启动 CURL 调用。

这是我的代码:

$url = 'https://app.webinarjam.com/api/v2/webinar';
$curlHandle = curl_init();
curl_setopt($curlHandle, CURLOPT_URL, $url);
curl_setopt($curlHandle, CURLOPT_HEADER, 1);
curl_setopt($curlHandle, CURLOPT_HTTPHEADER, array("Content-type: application/x-www-form-urlencoded"));
curl_setopt($curlHandle, CURLOPT_HTTPHEADER, array("Expect:"));
curl_setopt($curlHandle, CURLOPT_HTTPHEADER, array("Accept: application/json" ));
curl_setopt($curlHandle, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curlHandle, CURLOPT_SSL_VERIFYHOST, 2);
$query = http_build_query($data);
curl_setopt($curlHandle, CURLOPT_POST, true);
curl_setopt($curlHandle, CURLOPT_POSTFIELDS, $query);

ob_start();
curl_exec($curlHandle);
$content = ob_get_contents();
ob_end_clean();

我只得到 403 Forbidden 响应。

我已经确保 api 密钥和 url 端点都是正确的,所以 403 的唯一原因是调用不是来自 https 站点。

网站托管是共享服务器。

有任何想法吗?

编辑:这是来自 API 文档:

请注意,您需要通过 SSL 安全连接连接到我们的服务器。非 SSL 连接将被丢弃。

标签: phpcurlhttpshttp-status-code-403php-curl

解决方案


CURLOPT_HTTPHEADER 接受数组作为参数的原因是您可以一次指定多个标头。我认为这可能是问题,因为最后一个可能会覆盖以前的问题。

$headers    =   [];
$headers[]  =   "Content-type: application/x-www-form-urlencoded";
$headers[]  =   "Except: ";
$headers[]  =   "Accept: application/json";

$url = 'https://app.webinarjam.com/api/v2/webinar';
$curlHandle = curl_init();
curl_setopt($curlHandle, CURLOPT_URL, $url);
curl_setopt($curlHandle, CURLOPT_HEADER, 1);
curl_setopt($curlHandle, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curlHandle, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curlHandle, CURLOPT_SSL_VERIFYHOST, 2);
$query = http_build_query($data);
curl_setopt($curlHandle, CURLOPT_POST, true);
curl_setopt($curlHandle, CURLOPT_POSTFIELDS, $query);

ob_start();
curl_exec($curlHandle);
$content = ob_get_contents();
ob_end_clean();

推荐阅读