php - 如何在 PHP 中为新的 Udemy 2 API 身份验证添加 curl HTTP header ?

标签 php http header

Udemy 已将其 API 从 1.1 更改为 2,并添加了一个身份验证步骤,这基本上关闭了我使用 1.1 api 提取数据的网站。我找到了下面的示例并让它在过去几个月内正常工作,但随着更改,现在 Udemy 声明在 4 月 20 日之后他们将不再支持 1.1,我需要修复此问题。

function get_data($url) {
$ch = curl_init();
$timeout = 5;
$udemy_client_id = 'xxxxx';
$udemy_client_secret = 'xxxxx';
HTTP Authorization
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
   'X-Udemy-Client-Id: '.$udemy_client_id,
   'X-Udemy-Client-Secret: '.$udemy_client_secret
   ));
$data = curl_exec($ch);
curl_close($ch);
return $data;
}

$returned_content = get_data('https://www.udemy.com/api-1.1/courses/'.$id.'?fields[course]=@min,tagTitles,description,-images');


echo $returned_content;

1.1 只要求提供 client_id 和 client_secret 值,但现在添加了必须有 base64 编码的 HTTP 授权。 Udemy 示例:

curl --user {YOUR_CLIENT_ID}:{YOUR_CLIENT_SECRET} https://www.udemy.com/api-2.0/courses

curl -H "Authorization: Basic {BASE64_ENCODED_CLIENT_ID:CLIENT_SECRET}" https://www.udemy.com/api-2.0/courses

谁能告诉我如何将新的 base64 编码的 HTTP 授权包含到我上面的代码中,或者我是否需要编写新代码?

最佳答案

嘿,我已经解决了我的问题。 Udemy 使用 2 个不同的 client_id。 1 用于 api 2.0,另一个用于访问内容。 我的脚本加载了 2 个不同的 client_id,而我使用的是用于访问内容的,这反过来又是不正确的。 我必须使用第一个才能使 api 工作(api 2 的 client_id)。

是的,你必须将client_id 和client_secret 进行base64 转换。 我的代码在 python 中。不过不确定您是如何在 php 中执行此操作的。

关于php - 如何在 PHP 中为新的 Udemy 2 API 身份验证添加 curl HTTP header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29347859/

相关文章:

iphone - uitableview 部分标题内的日期格式,请帮忙

html - 制作标题,左侧带有 Logo ,右侧带有字母

php - 提取两个值之间的所有字符串

php - 如何在不破坏 MySQL 数据库的情况下跟踪页面浏览量

php - 使用 Zend DB 框架从 MySQL 中只获取一行

c++ - 通过 stdio 的 HTTP POST/GET

java - Android HttpPost文件上传500内部服务器错误

c# - 如何在 WPF 中将 header 添加到分隔符?

javascript - ajax 测试不工作

http - 是否有 Telegram uri 方案向自定义用户发送消息