【问题标题】:Initiate curl from https从 https 启动 curl
【发布时间】:2018-05-18 17:25:35
【问题描述】:

我正在建立 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 连接将被丢弃。

【问题讨论】:

  • 您是否在 URL 中指定了 https://? CURL 不知道您与 Web 服务器有什么连接,它也不应该真正关心。
  • 最可能的问题是您没有在 URL 前面加上https://。尝试顶部的 $url = preg_replace('/^https?:\/\//', 'https://', $url); 以确保 URL 是通过 SSL 连接的。
  • 我调用的网址是 https $url = 'https://app.webinarjam.com/api/v2/webinar';
  • 我很确定你弄错了 403 的原因。

标签: php curl https http-status-code-403 php-curl


【解决方案1】:

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();

【讨论】:

    猜你喜欢
    • 2021-03-16
    • 2020-01-26
    • 2014-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    相关资源
    最近更新 更多