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/

相关文章:

php - Doctrine 2 中的动态表/实体名称

Python - 拦截来自页面的 HTTP 请求

java - 使用 http post 将文件上传到本地主机?

java - 为什么无法从 JAR 文件加载主类 list 属性?

Oracle - 如何编写查询以返回以管道分隔的列标题名称?

php - 使用 Doctrine 加入多对多关系 Symfony4

php - Laravel 和 MySQL 时间戳值随 mysqld 配置而变化

php - Laravel Eloquent Relationship 自定义查询

java - 使用 java HTTP POST 连接发送图像文件

HTML/CSS 错误放置的标题和丢失的图像