hjalali
(Hossein Jalali)
1
我有一个非常简单的函数“应该”能工作,但由于某种原因它无法运行。有人能帮我理解我们哪里做错了吗?
我们一直收到“BAD CSRF”错误。
public function changeName()
{
$url = 'https://www.website.com/{username}.json';
$data = ['name' => 'James', 'api_key' => DISCOURSE_API, 'api_username' => 'system'];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:multipart/form-data'));
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
echo $response = curl_exec($ch);
if (!$response)
{
return false;
}
}
顺便提一下,我已经尝试将 api_key 和 api_username 作为 GET 参数移动到上面的 URL 中,但没有区别。
simon
2
hjalali
(Hossein Jalali)
3
非常感谢!问题解决了。
对于其他遇到同样问题的人:
$url = 'https://www.website.com/{username}.json';
$data = ['name' => 'George'];
$api_key = CUSTOM_DISCOURSE_API;
$headers = array("Content-Type: multipart/form-data;", "Api-Key: $api_key", "Api-Username: system");
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$result = curl_exec($ch);
if (curl_errno($ch) !== 0) {
// 处理错误,调用 curl_close($ch) 并返回。
}
curl_close($ch);
$discourse_user = json_decode($result);
hjalali
(Hossein Jalali)
4
补充一点,如果有人需要更新一个 “user_field”,请将 $data 替换为以下内容:
$data = ['user_fields' => ['1' => 'Something']];
其中的数字 “1” 指的是我创建的第一个 user_field(因为它们是按数字而非名称分配的)。
brospars
(Benoit Rospars)
5
从什么时候开始强制要求的?
在变更日志中没找到。我两年前创建了一个批量创建类别的工具,当时运行完美,但现在却出现了这个错误……
blake
(Blake Erickson)
6
对此造成的任何问题我们深表歉意。我们已对此变更进行了缓慢的逐步推行,并尽最大努力通知了相关人员,但很难涵盖所有弃用场景。