как можно вытащить этот json? https://yobit.net/api/3/ticker/ltc_btc-nmc_btc file_get_contents() выдает Warning: file_get_contents(https://yobit.net/api/3/ticker/ltc_btc-nmc_btc): failed to open stream: HTTP request failed! HTTP/1.1 503 Service Temporarily Unavailable in cURL вытаскивает только разметку страницы без Json пример на Python https://bablofil.ru/yobit-api-python/
Можно нагуглить что-нибудь готовое по cloudflare bypass или наколхозить самому. Спойлер PHP: $url = 'https://yobit.net/api/3/ticker/ltc_btc-nmc_btc'; $ch = curl_init(); curl_setopt_array($ch, [ CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => 1, CURLOPT_FOLLOWLOCATION => 1, CURLOPT_USERAGENT => '', CURLOPT_COOKIEJAR => '' ]); $html = curl_exec($ch); if (!strstr($html, "DDoS protection by CloudFlare")) { curl_setopt_array($ch, [ CURLOPT_URL => get_jschl($html, $url), CURLOPT_REFERER => $url ]); $html = curl_exec($ch); } echo $html; function get_jschl($html, $url) { // get var name // var s,t,o,p,b,r,e,a,k,i,n,g,f, ZKlZkGE={"TRNDyY":+((!+[]+!![]+!![]+[])+(!+[]+!![]+!![]))}; preg_match('~var \S+\s+(\w+)=\{"(\w+)":([^}]+)\}~', $html, $match); $answer = calc($match[3]); $pattern = sprintf('~%s\.%s([-+*])=([^;]+)~', $match[1], $match[2]); preg_match_all($pattern, $html, $matches, PREG_SET_ORDER); foreach ($matches as $m) { switch ($m[1]) { case '-' : $answer -= calc($m[2]); break; case '+' : $answer += calc($m[2]); break; case '*' : $answer *= calc($m[2]); break; } } $m = parse_url($url); preg_match_all('~<input type="hidden" name="([^"]+)" value="([^"]+)~', $html, $matches); $data = array_combine($matches[1], $matches[2]); $data['jschl_answer'] = $answer + strlen($m['host']); sleep(4); return sprintf('%s://%s/cdn-cgi/l/chk_jschl?%s', $m['scheme'], $m['host'], http_build_query($data)); } function calc($expr) { $result = ''; preg_match_all('~\([^()]+\)~', "($expr)", $matches); foreach ($matches[0] as $v) { $result .= substr_count($v, '!+') + substr_count($v, '!![]'); } return $result; }
Чет там намудрил. Поменять нужно if (!strstr($html, "DDoS protection by Cloudflare") на if (stristr($html, "DDoS protection by Cloudflare")
Дружище ты крут!!! Мне стыдно, но я вообще не понял что делает в функции get_jschl(). Если сможешь скинь ссылку на ресурс где разбирается этот код? еще раз большое спасибо!
смотри у меня вот так еще получилось Код (Text): $cookie='cookie.txt'; $url = 'https://yobit.net/api/3/ticker/ltc_btc-nmc_btc'; $ch = curl_init(); curl_setopt_array($ch, [ CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => 1, CURLOPT_FOLLOWLOCATION => 1, CURLOPT_USERAGENT => '', CURLOPT_COOKIEJAR => $cookie, CURLOPT_COOKIEFILE=> $cookie, CURLOPT_COOKIESESSION=> true, ]); $html = curl_exec($ch); echo $html; Создал файл в который записываю куки, дальше из этого файла вставляю куки в заголовок и разрешаю сессионные куки короче вот эти строчки исправили ситуацию Код (Text): CURLOPT_COOKIEJAR => $cookie, CURLOPT_COOKIEFILE=> $cookie, CURLOPT_COOKIESESSION=> true,