Bitrix: Request is not XHR
В одном из проектов, скрипт парсит сайт на bitrix. С какого то момента, при установке параметров таблицы отдаваемой по ajax, стала выводиться ошибка «Request is not XHR». Быстрый гуглинг решения не дал. Стал кропотливо сравнивать заголовки которые отдаются запросом в браузере и заголовки который отдавал в скрипте. Отличие нашлось относительно быстро, страница на сайте добавляла дополнительный заголовок «Bx-ajax:true». В результате модифицировал скрипт следующим образом:
$custom_header=[];
$custom_header[]="Access-Control-Allow-Origin: *";
$custom_header[]="Accept: */*";
$custom_header[]="Bx-ajax:true";
$res=$this->request("/bitrix/components/bitrix/main.ui.grid/settings.ajax.php?GRID_ID=".$grid_id."&bxajaxid=".$bxajaxid."&action=setSort",$param,"POST",true,$custom_header);
var_dump($res);
Сама функция запроса уже устоялась, и при таскании из скрипта в скрипт у меня выглядит так::
public function request($query,$param,$type="POST",$headers=false,$custom_header=[],$follow_location=true) {
$url=$this->url.$query;
if ($this->debug==true){echo "URL:$url\n";};
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_VERBOSE, $this->debug);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $follow_location);
if ($headers==true){
curl_setopt($ch, CURLOPT_HEADER, 1);
};
if ($type=="POST"){
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
if ($this->debug==true){
echo "---------------- POST -------------\n";
var_dump($param);
echo "-----------------------------------\n";
};
};
if (count($custom_header)>0){
curl_setopt($ch, CURLOPT_HTTPHEADER, $custom_header);
if ($this->debug==true){
echo "---------------- HEADER -------------\n";
var_dump($custom_header);
echo "-----------------------------------\n";
};
};
if (count($this->cookies)>0){
$str_cook="";
foreach ($this->cookies as $key=>$value) {
$str_cook=$str_cook.$key."=".$value.";";
};
if ($this->debug==true){
echo "COOKIE:$str_cook\n";
};
curl_setopt($ch, CURLOPT_COOKIE,$str_cook);
};
$res=curl_exec($ch);
if (curl_errno($ch)) {
$error_msg = curl_error($ch);
if ($this->debug==true){
var_dump($res);
var_dump($error_msg);
die();
};
};
if ($this->debug==true){
echo "---------------- РЕЗУЛЬТАТ -------------\n";
var_dump($res);
echo "-------------------------- -------------\n";
};
return $res;
}



