Прочитайте (), странно поведя URL [duplicate]

У меня возникла эта проблема при загрузке состояния кэшированного сокращения. Если я просто загружаю состояние кеширования, я бы столкнулся с ошибками для новой версии приложения с обновленной структурой состояния.

Уже упоминалось, что lodash предлагает функцию merge, которую я использовал:

const currentInitialState = configureState().getState();
const mergedState = _.merge({}, currentInitialState, cachedState);
const store = configureState(mergedState);
36
задан A-B-B 6 October 2016 в 02:59
поделиться

3 ответа

from urllib.request import urlopen, Request

urlopen(Request(url, headers={'User-Agent': 'Mozilla'}))
15
ответ дан Collin Anderson 17 August 2018 в 21:23
поделиться
  • 1
    Это важно. Мне пришлось импортировать urllib.request не просто urllib. Все остальное в принятом ответе работает с этой модификацией. – wrkyle 24 January 2016 в 04:21
  • 2
    (Разве это не то, что у меня уже есть?) – Collin Anderson 25 January 2016 в 20:00
  • 3
    Да, да, но принятый ответ не так, я хотел обратить внимание на ваш ответ, потому что он затрагивает недостаток в принятом. – wrkyle 26 January 2016 в 08:08
  • 4
    Ошибка HTTP 404: не найдено – Maksim Kniazev 13 May 2018 в 21:11

Я просто ответил на аналогичный вопрос: https://stackoverflow.com/a/43501438/206820

Если вы просто не просто хотите открыть URL-адрес, но также хотите загрузить ресурс (скажем, файл PDF), вы можете использовать код, как показано ниже:

    # proxy = ProxyHandler({'http': 'http://192.168.1.31:8888'})
    proxy = ProxyHandler({})
    opener = build_opener(proxy)
    opener.addheaders = [('User-Agent','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30')]
    install_opener(opener)

    result = urlretrieve(url=file_url, filename=file_name)

Причина, по которой я добавил прокси, - отслеживать трафик в Чарльзе, и вот трафика я получил:

2
ответ дан Community 17 August 2018 в 21:23
поделиться
  • 1
    здорово! это почти работает - просто интересно, как вы получите исходный код от этого? Обычно я бы использовал url.read (), но он не работает в этом случае, потому что его urllib.request.Request, а не urlopen? – user3662991 15 June 2014 в 06:46
  • 2
    Обновленный ответ, чтобы вы могли увидеть, как его использовать. – Martin Konecny 15 June 2014 в 06:49
  • 3
    Слава Мартину, работал как шарм. Спасибо за ваше терпение и готовность помочь! – user3662991 15 June 2014 в 06:56
  • 4
    Спасибо за предоставление ответа, который использует объекты OpenerDirector, возвращенные build_opener ()! Это очень помогло мне – happyskeptic 3 December 2017 в 11:43
  • 5
    import urllib.request ImportError: No module named request – User 10 May 2018 в 19:45
  • 6
    Ошибка HTTP 404: не найдено – Maksim Kniazev 13 May 2018 в 21:09

Отказ узла узла исходит из основных правил OWASP ModSecurity для модульной безопасности Apache. Правило 900002 имеет список «плохих» пользовательских агентов, а один из них - «python-urllib2». Вот почему запросы с пользовательским агентом по умолчанию терпят неудачу.

К сожалению, если вы используете функцию «robotparser» Python,

https://docs.python.org/3.5/ library / urllib.robotparser.html? highlight = robotparser # module-urllib.robotparser

он использует пользовательский агент Python по умолчанию, и нет никакого параметра для его изменения. Если попытка «robotparser» прочитать «robots.txt» отклоняется (а не только URL не найден), тогда он обрабатывает все URL-адреса с этого сайта как запрещенные.

-1
ответ дан John Nagle 17 August 2018 в 21:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: