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; } |