Задать вопрос

Почему не отвечает API Bitbucket Server, выдает XSRF Error?

Всем привет! Есть у нас Bitbucket Server, и другой сервак, с которого хотим до него достучаться.

Нашел что-то вроде вялой документации:
https://docs.atlassian.com/bitbucket-server/rest/7...

Попробовал один из примеров:
$url = "http://10.77.78.235:7990/rest/api/1.0/projects/HAL/repos/crm-2/branches";

$headers = array(
    'cache-control: max-age=0',
    'upgrade-insecure-requests: 1',
    'user-agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36',
    'sec-fetch-user: ?1',
    'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
    'x-compress: null',
    'sec-fetch-site: none',
    'sec-fetch-mode: navigate',
    'accept-encoding: deflate, br',
    'accept-language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7',
    "Content-Type: application/json",
    'X-Atlassian-Token: no-check',
);

$post_data = array (
    "name" => "bar",
    "startPoint" => "52005525378526ac3d5e5bcffc48fc9a82ebca76",
    "message" => "Submit"
);

$ch = curl_init();

curl_setopt($ch, CURLOPT_USERPWD, "myuser:mypassword");
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1);

$output = curl_exec($ch);

curl_close($ch);

echo $output;


Ответ:
XSRF check failed

В чем проблема? Вроде бы на сайте атлассиан нашел инфу, что в хедере флаг 'X-Atlassian-Token: no-check' - должен отключать проверку.
  • Вопрос задан
  • 342 просмотра
Подписаться 1 Средний Комментировать
Решения вопроса 1
vekov
@vekov Автор вопроса
Вообще проблема была в лишних хедерах, сам себе поставил палки в колёса. Работающий вариант будет с таким набором:

$headers = array(
    'cache-control: max-age=0',
    'upgrade-insecure-requests: 1',
    'sec-fetch-user: ?1',
    'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
    'x-compress: null',
    'sec-fetch-site: none',
    'sec-fetch-mode: navigate',
    'accept-encoding: deflate, br',
    'accept-language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7',
    "Content-Type: application/json",
    'X-Atlassian-Token: no-check',
);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
вначале надо получить токен с правами REPO_READ, см секцию Authentication и то как работает OAuth
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы