HTTPError: перемещено Постоянно возбуждается функцией urllib2.urlopen ()

Вы можете использовать пакет signal , если вы работаете в UNIX:

In [1]: import signal

# Register an handler for the timeout
In [2]: def handler(signum, frame):
   ...:     print "Forever is over!"
   ...:     raise Exception("end of time")
   ...: 

# This function *may* run for an indetermined time...
In [3]: def loop_forever():
   ...:     import time
   ...:     while 1:
   ...:         print "sec"
   ...:         time.sleep(1)
   ...:         
   ...:         

# Register the signal function handler
In [4]: signal.signal(signal.SIGALRM, handler)
Out[4]: 0

# Define a timeout for your function
In [5]: signal.alarm(10)
Out[5]: 0

In [6]: try:
   ...:     loop_forever()
   ...: except Exception, exc: 
   ...:     print exc
   ....: 
sec
sec
sec
sec
sec
sec
sec
sec
Forever is over!
end of time

# Cancel the timer if the function returned before timeout
# (ok, mine won't but yours maybe will :)
In [7]: signal.alarm(0)
Out[7]: 0

Через 10 секунд после вызова alarm.alarm(10) вызывается обработчик. Это вызывает исключение, которое вы можете перехватить из обычного кода Python.

Этот модуль плохо воспроизводится с потоками (но тогда кто это делает?)

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

def loop_forever():
    while 1:
        print 'sec'
        try:
            time.sleep(10)
        except:
            continue

0
задан danfp35 21 January 2019 в 13:24
поделиться

1 ответ

Ошибка «Перемещено навсегда» означает, что сервер ответил ошибкой HTTP 301, что означает, что запрашиваемый вами URL был перемещен на другой URL ( https://en.wikipedia.org/wiki/ HTTP_301 ).

Я бы предложил взять захват сетевого трафика с помощью таких инструментов, как tcpdump или wireshark, чтобы проверить HTTP-диалог и подтвердить. Если сервер на самом деле отвечает 301, и это не означает, что urllib вызывает неправильный код ошибки, ответ сервера должен включать заголовок «Location» с другим URL, и вы должны попробовать его вместо этого.

Обратите внимание, что urllib имеет проблемы при работе с перенаправлениями. , поэтому вы можете пересмотреть попытку заставить модуль «запросов» работать вместо этого.

0
ответ дан piwai 21 January 2019 в 13:24
поделиться
Другие вопросы по тегам:

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