добавление CSRF-токена в заголовок запроса

439
21 апреля 2017, 21:59

Добрый день, раньше к crm (bpmonline) по протоколу OData выполняли запросы таким образом:

$url = "https://0632.bpmonline.com/ServiceModel/AuthService.svc/Login";
$requestData["Language"] = "ru";
$requestData["SolutionName"] = "TSBpm";
$requestData["TimeZoneOffset"] = -180;
$requestData["UserName"] = "user";
$requestData["UserPassword"] = "pass";
$jcres = json_encode($requestData);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $jcres);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json',
        'Content-Length: ' . strlen($jcres))
);
$result = curl_exec($ch);
curl_close($ch);
$url = "https://0632.bpmonline.com/0/ServiceModel/EntityDataService.svc/LeadCollection";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
$obj = new stdClass();
$arr = array(
    "LeadName" => 'name',
    'Email' => 'test@gmail.com',
);
foreach ($arr as $k => $v) {
    $obj->{$k} = $v;
}
$json = json_encode($obj);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json;odata=verbose',
        'Content-Length: ' . strlen($json))
);
$result = curl_exec($ch);
curl_close($ch);

Вчера была обновлена версия crm и добавлена защита от CSRF атак и теперь не удается выполнять запросы, появляется ошибка: 403 - Forbidden: Access is denied. You do not have permission to view this directory or page using the credentials that you supplied. Подскажите, пожалуйста как правильно реализовать добавление CSRF-токена в заголовок запроса.

Answer 1
$token = $doc->getElementById("signin__csrf_token")->attributes->getNamedItem("value")->value;    
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Content-Length: ' . strlen($jcres)),
    'X-CSRF-Token:' .  $token;
);

http://stackoverflow.com/questions/28785578/curl-csrf-token

READ ALSO
Как удалить двойной параграф в PHP

Как удалить двойной параграф в PHP

Как удалить двойной параграф в PHP?

268
Не возвращает страны из ВК

Не возвращает страны из ВК

Всем доброго времени сутокХочу вывести список стран,отправляю запрос Заранее всем спасибо за ответы

436
unexpected '!'что с этим делать

unexpected '!'что с этим делать

Столкнулся с этой прескорбной надписью

245
Загрузка файла, phpexcel

Загрузка файла, phpexcel

Загружаю файл, который генерирует файл в форматеxsl , но функция

351