Почему Connection aborted при подключении к существующему URL Яндекс Погоды?

import requests

city_id = 27612
url = 'https://export.yandex.ru/weather-ng/forecasts/%s.xml' % city_id
response = requests.get(url)


При попытки подключиться к API погоды очень часто выдается ('Connection aborted.', BadStatusLine("''",)) если тестировать локально, а при попытки с сервера - всегда.

Это что, защита Яндекса? Если да, то зачем тогда это АПИ, а если нет - то что я делаю не так?
  • Вопрос задан
  • 3242 просмотра
Решения вопроса 1
@Damakshn
По всей видимости, ЯндексПогода принимает вашу программу за бота и сбрасывает соединение. Чтобы этого избежать, нужно притвориться браузером, т.е. сделать так, чтобы отправляемый программой http-запрос имел заголовок User-agent. Плюс может потребоваться запрашивать данные несколько раз по этой же причине (вылезает ошибка RemoteDisconnected). Я использовал сессии, получилось.

import requests
headers = {'User-agent':'Mozilla/5.0','Referer':'http://www.python.org/'}
session = requests.Session()
adapter = requests.adapters.HTTPAdapter(max_retries=10)
session.mount('http://', adapter)
# запрашиваем нужные урлы
for url in urls:    
    response = session.request('GET', url, headers = headers)
    # делаем что-то с response...
    reponse.close()
session.close()

Ещё могут быть проблемы из-за старой версии Питона, писал в 2.7 через urllib2 - не работало, в 3.5 - все норм.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы