WLM1ke / apimoex

Сlient for MOEX ISS
https://wlm1ke.github.io/apimoex/
The Unlicense
88 stars 26 forks source link

[Errno 104] Connection reset by peer #13

Closed darkcorpd closed 2 years ago

darkcorpd commented 2 years ago

Добрый день!

Вчера все прекрасно работало, а сегодня столкнулся с ошибкой сервера: ProtocolError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer')) ConnectionError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))

Хотя в браузере при этом ссылки запросов открываются. В чем может быть проблема и каковы пути решения?

Спасибо

WLM1ke commented 2 years ago

Можете привести минимальный пример кода, на котором воспроизводится ошибка?

darkcorpd commented 2 years ago

С использованием модуля apimoex:

import requests
import apimoex
import pandas as pd

def get_security_board(ticker):
  with requests.Session() as session:
    data = apimoex.find_securities(session, ticker, columns = None)
    df = pd.DataFrame(data)
    print(df.at[0, 'primary_boardid'])

board = get_security_board('RU0007661625')

Или самый простой без apimoex:

import requests
url = 'http://iss.moex.com/iss/index.json'
response = requests.get(url, headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36'})
response.status_code
WLM1ke commented 2 years ago

И у вас первый код выдает ошибку?

У меня все работает.

Не исключаю, что это какая-то защита на стороне MOEX против вашего IP. Или вы слишком бомбили их запросами, или кто-то у вашего провайдера попал в список подозрительных IP и заблокировали диапазон.

darkcorpd commented 2 years ago

Да, вчера я довольно активно тестировал запросы. Сегодня все блокируется, хотя в браузере открывается. Я запускал код из разных источников, в т.ч. через мобильный интернет, но пока не смог решить проблему. Есть ли какой-то выход?

WLM1ke commented 2 years ago

А второй вариант кода без apimoex работает?

darkcorpd commented 2 years ago

Тоже нет. При этом из того же нотбука загрузка курсов валют с сайта ЦБ работает.

WLM1ke commented 2 years ago

А обращение к http://iss.moex.com/iss/index.json в браузере работает?

Если браузер работает, то нужно посмотреть, какие заголовки он посылает и создать такой же (атрибут headers у requests.Session()). По идее должно работать.

А дальше вести себя более осторожно: не бомбить огромным числом запросов, не посылать повторные однотипные запросы, а сохранять нужную информацию локально после одного запроса.

darkcorpd commented 2 years ago

Похоже, сервер MOEX блокирует запросы не из российских IP. Обращение к http://iss.moex.com/iss/index.json в браузере работает, но код я запускал из Google Colab, поэтому видимо сервер отказывает в доступе. Сейчас проверил доступность из другой страны - сайт moex.com недоступен.

This site can’t be reached
moex.com took too long to respond.
Try:

Checking the connection
Checking the proxy and the firewall
Running Windows Network Diagnostics
ERR_CONNECTION_TIMED_OUT

Я бы не сказал, что бомбил сервер, но мало ли. В любом случае, спасибо.

WLM1ke commented 2 years ago

Это может быть проблемой - сейчас много атак, поэтому могут резать по региональному признаку.

Еще по опыту, если код многопоточный они не очень любят более 10-20 параллельных обращений API.

darkcorpd commented 2 years ago

Отчитаюсь. С российских IP все работает. Через colab.google сервер Мосбиржи перестал пускать. Похоже, в принципе блокирует иностранные айпи.

epogrebnyak commented 2 years ago

Отчитаюсь. С российских IP все работает. Через colab.google сервер Мосбиржи перестал пускать. Похоже, в принципе блокирует иностранные айпи.

У них уже такое было - через colab не работало какое-то время, потом снова открылось, сейчас видимо закрылось.

epogrebnyak commented 2 years ago

Может закроем ишью, чтобы не висело, @darkcorpd, @WLM1ke?

darkcorpd commented 2 years ago

Я не против. Но неплохо бы указать, что сервер Мосбиржи стал недоступен с иностранных IP.

epogrebnyak commented 2 years ago

Я не против. Но неплохо бы указать, что сервер Мосбиржи стал недоступен с иностранных IP.

неплохо бы указать - кому и где? Это задача биржи и документации к API, не опен-сорсного пакета.