Обход CloudFlare
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.82] |
|
|
Правила раздела Visual Basic: Общие вопросы
FAQ Сайта
FAQ Раздела
Кладовка
Наши Исходники
API-Guide
Поиск по Разделу
MSDN Library Online
Google
Обход CloudFlare
|
|
|
|
|
Прикреплённый файл
excel_data_bridge_main.zip (18,46 Кбайт, скачиваний: 3)
Здравствуйте! Решил для себя изучить криптовалюту, нашёл сайт ru.investing.com, хочу оттуда результаты индикаторов получать в режиме реального времени, но не знаю как обойти защиту. Если даже через браузер ввести https://api.investing.com/api/financialdata...storical/chart/, то он даёт ошибку ![]() ![]() [*]{"@errors":["Core API respond with invalid status: 500"]} Пытался через VB6 зайти на обычную страницу с индикаторами https://ru.investing.com/crypto/bitcoin/technical, но HTML-ответ через запрос GET отображается в сильно зашифрованном виде, что ничего не понять. А если ту же страницу открыть в браузере в виде HTML, то всё отлично. ![]() ![]() Set http = CreateObject("MSXML2.XMLHTTP") http.Open "GET", "https://api.investing.com/api/financialdata/2186/historical/chart/", False http.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" http.setRequestHeader "Accept-Language", "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7" http.setRequestHeader "Accept-Encoding", "gzip, deflate, br" http.setRequestHeader "Connection", "keep-alive" http.setRequestHeader "DNT", "1" http.setRequestHeader "Sec-Fetch-Dest", "empty" http.setRequestHeader "Sec-Fetch-Mode", "cors" http.setRequestHeader "Sec-Fetch-Site", "same-origin" http.setRequestHeader "interval", "PT1M" http.setRequestHeader "pointscount", "160" http.Send fs_input = http.ResponseText Set http = Nothing Нашёл пример на Python, но там спец. библиотеки, я с ним плохо знаком, поэтому не могу ничего понять. Отрывок из кода программы: ![]() ![]() class InvestingParser: def __init__(self): self.user_agents = [ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36', ] self.session = None self.init_session() def init_session(self): self.session = requests.Session() user_agent = random.choice(self.user_agents) headers = { 'User-Agent': user_agent, 'Accept': 'application/json, text/javascript, */*; q=0.01', 'Accept-Language': 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7', 'Accept-Encoding': 'gzip, deflate, br', 'Connection': 'keep-alive', 'DNT': '1', 'Sec-Fetch-Dest': 'empty', 'Sec-Fetch-Mode': 'cors', 'Sec-Fetch-Site': 'same-origin' } self.session.headers.update(headers) from requests.adapters import HTTPAdapter from urllib3.util.retry import Retry retry_strategy = Retry(total=3, backoff_factor=1, status_forcelist=[429, 500, 502, 503, 504]) adapter = HTTPAdapter(max_retries=retry_strategy) self.session.mount("https://", adapter) def try_cloudscraper(self): try: import cloudscraper logging.info("Используем cloudscraper для обхода CloudFlare...") scraper = cloudscraper.create_scraper() url = "https://api.investing.com/api/financialdata/2186/historical/chart/" params = {'interval': 'PT1M', 'pointscount': '160'} response = scraper.get(url, params=params, timeout=30) if response.status_code == 200: return self.process_data(response.json()) return {'error': f'HTTP Error {response.status_code}'} except Exception as e: logging.error(f"Ошибка CloudScraper: {str(e)}") return {'error': f'CloudScraper error: {str(e)}'} def try_requests(self): try: logging.info("Пробуем прямой запрос через requests...") url = "https://api.investing.com/api/financialdata/2186/historical/chart/" params = {'interval': 'PT1M', 'pointscount': '160'} response = self.session.get(url, params=params, timeout=30) if response.status_code == 200: return self.process_data(response.json()) return {'error': f'HTTP Error {response.status_code}'} except Exception as e: logging.error(f"Ошибка requests: {str(e)}") return {'error': f'Requests error: {str(e)}'} Саму программу скачивал здесь: https://github.com/empenoso/excel-data-bridge Прикрепил ZIP-архив к теме. |