Bitrix: Request is not XHR
В одном из проектов, скрипт парсит сайт на bitrix. С какого то момента, при установке параметров таблицы отдаваемой по ajax, стала выводиться ошибка «Request is not XHR». Быстрый гуглинг решения не дал. Стал кропотливо сравнивать заголовки которые отдаются запросом в браузере и заголовки который отдавал в скрипте. Отличие нашлось относительно быстро, страница на сайте добавляла дополнительный заголовок «Bx-ajax:true». В результате модифицировал скрипт следующим образом:
| 1 2 3 4 5 6 |         $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); | 
Сама функция запроса уже устоялась, и при таскании из скрипта в скрипт у меня выглядит так::
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |  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;     }     | 





