Как знать, успешно выполняется ли urllib.urlretrieve?

Это прекрасно работает ...

  echo <<<EOE
   <script type="text/javascript">
     if (navigator.cookieEnabled)
       document.cookie = "tzo="+ (- new Date().getTimezoneOffset());
   </script>
EOE;
  if (!isset(

Это прекрасно работает ...

[110]COOKIE['tzo'])) { echo <<<EOE <script type="text/javascript"> if (navigator.cookieEnabled) document.reload(); else alert("Cookies must be enabled!"); </script> EOE; die(); } $ts = new DateTime('now', new DateTimeZone('GMT')); $ts->add(DateInterval::createFromDateString(

Это прекрасно работает ...

[110]COOKIE['tzo'].' minutes'));
53
задан btw0 12 June 2009 в 15:54
поделиться

4 ответа

Рассмотрите возможность использования urllib2 , если это возможно в вашем случае. Он более продвинутый и простой в использовании, чем urllib .

Вы можете легко обнаружить любые ошибки HTTP:

>>> import urllib2
>>> resp = urllib2.urlopen("http://google.com/abc.jpg")
Traceback (most recent call last):
<<MANY LINES SKIPPED>>
urllib2.HTTPError: HTTP Error 404: Not Found

resp на самом деле является объектом HTTPResponse , который вы можете сделать много полезных вещей с:

>>> resp = urllib2.urlopen("http://google.com/")
>>> resp.code
200
>>> resp.headers["content-type"]
'text/html; charset=windows-1251'
>>> resp.read()
"<<ACTUAL HTML>>"
26
ответ дан 7 November 2019 в 08:53
поделиться

Нужно ли заново заселять все сразу, или можно это делать по частям в setTimeout ()? Я понимаю, что по частям это, вероятно, займет еще больше времени, но для пользователя стоит многого, чтобы увидеть, что что-то происходит, а не очевидная блокировка.

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

needparam=[]
for each in dir(b):
    x='b.'+each+'()'
    try:
        eval(x)
        print x
    except:
        needparam.append(x)
3
ответ дан 7 November 2019 в 08:53
поделиться

В итоге я получил свою реализацию retrieve , с помощью pycurl он поддерживает больше протоколов, чем urllib / urllib2, надеюсь, это поможет другим люди.

import tempfile
import pycurl
import os

def get_filename_parts_from_url(url):
    fullname = url.split('/')[-1].split('#')[0].split('?')[0]
    t = list(os.path.splitext(fullname))
    if t[1]:
        t[1] = t[1][1:]
    return t

def retrieve(url, filename=None):
    if not filename:
        garbage, suffix = get_filename_parts_from_url(url)
        f = tempfile.NamedTemporaryFile(suffix = '.' + suffix, delete=False)
        filename = f.name
    else:
        f = open(filename, 'wb')
    c = pycurl.Curl()
    c.setopt(pycurl.URL, str(url))
    c.setopt(pycurl.WRITEFUNCTION, f.write)
    try:
        c.perform()
    except:
        filename = None
    finally:
        c.close()
        f.close()
    return filename
1
ответ дан 7 November 2019 в 08:53
поделиться

Вы можете создать новый URLopener (унаследованный от FancyURLopener) и бросать исключения или обрабатывать ошибки любым удобным для вас способом. К сожалению, FancyURLopener игнорирует 404 и другие ошибки. См. этот вопрос:

Как поймать 404 ошибку в urllib.urlretrieve

2
ответ дан 7 November 2019 в 08:53
поделиться
Другие вопросы по тегам:

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