На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual Basic: Общие вопросы
Здесь обсуждаются вопросы по языку Visual Basic 1-6 (а так же по схожим языкам, как, например, PowerBASIC).
Вопросы по Visual Basic .NET (это который входит в состав Visual Studio 2002/2003/2005/2008+, для тех, кто не в курсе) обсуждаются в разделе .NET.

Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что Вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются. Студенты, вам сюда: ПОМОЩЬ СТУДЕНТАМ!
4. Используйте теги [ code=vba ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Формулируйте свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной (и более) давности, без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта user posted image FAQ Раздела user posted image Кладовка user posted image Наши Исходники user posted image API-Guide user posted image Поиск по Разделу user posted image MSDN Library Online user posted image Google

Ваше мнение о модераторах: user posted image SCINER, user posted image B.V.
Модераторы: SCINER, B.V.
  
> Обход CloudFlare
    Прикреплённый файлПрикреплённый файлexcel_data_bridge_main.zip (18,46 Кбайт, скачиваний: 3)

    Здравствуйте!
    Решил для себя изучить криптовалюту, нашёл сайт ru.investing.com, хочу оттуда результаты индикаторов получать в режиме реального времени, но не знаю как обойти защиту.

    Если даже через браузер ввести https://api.investing.com/api/financialdata...storical/chart/, то он даёт ошибку
    ExpandedWrap disabled
      [*]{"@errors":["Core API respond with invalid status: 500"]}


    Пытался через VB6 зайти на обычную страницу с индикаторами https://ru.investing.com/crypto/bitcoin/technical, но HTML-ответ через запрос GET отображается в сильно зашифрованном виде, что ничего не понять.
    А если ту же страницу открыть в браузере в виде HTML, то всё отлично.

    ExpandedWrap disabled
      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, но там спец. библиотеки, я с ним плохо знаком, поэтому не могу ничего понять.

    Отрывок из кода программы:
    ExpandedWrap disabled
       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-архив к теме.
    Сообщение отредактировано: salieri -
    1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script execution time: 0,0217 ]   [ 16 queries used ]   [ Generated: 28.01.26, 03:04 GMT ]