【问题标题】:How to add curl HTTP Headers for authentication in PHP?如何在 PHP 中添加 curl HTTP 标头进行身份验证?
【发布时间】:2014-08-20 14:37:19
【问题描述】:

我想添加 HTTP 标头以验证 Udemy API 访问。有人可以告诉我如何添加标头。我已经有了客户端 ID 和密钥。我想从 PHP 页面访问 API。 https://developers.udemy.com/ 这是我尝试使用的代码:

$ch = curl_init($request);
curl_setopt($ch, CURLOPT_URL, $request);
curl_setopt($ch,CURLOPT_HTTPHEADER,array('X-Udemy-Client-Id:MY_ID','X-Udemy-Client-Secret:Secret'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$results= curl_exec($ch);
echo $results;

输出:

Blank Page

谁能指出问题出在哪里?

【问题讨论】:

  • 为什么要运行 curl 请求,然后运行 ​​file_get_contents?回声 $results;
  • @drmarvelous 我基本上想在wordpress主题中访问json格式的API提要。但它没有经过身份验证。
  • 正确,但你已经用 curl 做到了。现在您正在执行两个不同的请求(尽管格式错误)
  • 我这样做了,它给了我一个空白页。

标签: php authentication curl http-headers


【解决方案1】:

正如@drmarvelous 所写,您执行 两个 请求(第一个 - 通过 CURL,第二个 - 通过 file_get_contents),它们的作用相同。其中 CURL 请求的结果实际上并未在您的脚本中使用。它使用file_get_contents 请求的结果,该请求在没有身份验证参数的情况下执行。因此,您会收到 Unauthorized 错误。

所以你必须使用 CURL 请求的结果:

...
$json = json_decode($results, true);
print_r($json);

更新:

您必须确保对 API 请求使用有效的 URL,即代码中的 $request 值应该是有效的 URL。此外,请确保通过 HTTP 标头传递有效的身份验证参数(Client-IdClient-Secret)。

此外,由于 API 是安全的,您必须通过将 CURLOPT_SSL_VERIFYPEER 选项设置为 false 来禁用 SSL 对等验证。

所以代码应该是这样的:

$ch = curl_init($request);
curl_setopt($ch, CURLOPT_URL, $request);
curl_setopt($ch,CURLOPT_HTTPHEADER,array('X-Udemy-Client-Id: {YourID}','X-Udemy-Client-Secret: {YourSecret}'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$results= curl_exec($ch);
echo $results;

【讨论】:

  • 嘿,我尝试进行这些更改并更新了帖子,但是当我使用 echo $results;它给出了一个空白页。
  • 但是您的期望是什么?一些消息?我认为空白页是对 authentication 请求的正常响应。 IE。 “没有消息”表示“正常”(没有错误)。
  • 哦,我期待 api 页面上显示的提要。我想访问提要数据。
  • 您无法获取身份验证请求的数据。仅用于认证用户,不用于获取数据
  • 即使我输入了错误的 API 密钥,它也会显示一个空白页。要在身份验证后访问数据,我需要做什么?
猜你喜欢
  • 2012-10-22
  • 2016-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-19
  • 2018-09-21
  • 1970-01-01
相关资源
最近更新 更多