Spynner загружает нулевой байт.jpg с browser.download(url, имя файла) - Python, PHP

Вот код, который я пробовал. Файлы имеют размер 0 байт. Я также установил imagedata=br.download(...), и он сообщает 0 для len(). Я занимаюсь этим часами... есть идеи?

pre_record_soup='[<img src='/show_pic.php?id=316600'>]' #simplified

def func_get_pic(pre_record_soup, br=spynner.Browser()):
    baseurl='http://www.testsite.com/'

    for record in pre_record_soup:
        imagetag=record.find('img')
        filename = 'image.jpg' #set name of file afterdownload

        try:
            if imagetag:
                piclink = imagetag.find('img')['src']
            else:
                piclink = 'basicimages/icons/icon.gif'
                filename = 'icon.gif'
        except TypeError:
            return None

        print baseurl+piclink #this prints the expected link
        print filename #this prints the filename I want

        with open('/home/myhome/'+filename, 'wb') as handle:
            br.download(baseurl+piclink,handle) #not retrieving image...

Я также вызываю эту функцию во время аутентифицированного сеанса от spynner. Таким образом, Spynner регистрирует меня на веб-сайте, и я собираю эти и другие данные. Остальные данные (текст) соскребают нормально. Кроме того, когда я посещаю URL-адрес изображения в браузере, он правильно отображает файл JPEG.

Спасибо за любую помощь!

edit-10 March 2014 // Вот что Spynner дает мне отладочное сообщение. Обратите внимание на правильно отформатированный URL для php-обслуженного изображения и отсутствие "Чтение из потока загрузки", которое присутствует в правильно загруженном.gif:

http://www.testsite.com/show_pic.php?id=81851
Request: GET http://www.testsite.com/show_pic.php?id=81851
Start download: http://www.testsite.com/show_pic.php?id=81851
Download finished: http://www.testsite.com/show_pic.php?id=81851
http://www.testsite.com/basicimages/icons/icon.gif
Request: GET http://www.testsite.com/basicimages/icons/icon.gif
Start download: http://www.testsite.com/basicimages/icons/icon.gif
Read from download stream (419 bytes): http://www.testsite.com/basicimages/icons/icon.gif
Download finished: http://www.testsite.com/basicimages/icons/icon.gif

Дополнительный поток информации отладки от попытки br.load. Обратите внимание, что длина содержимого составляет 0 байтов. Это загружает FINE в Firefox... UGH!

Page load started
Request: GET http://www.testsite.com/show_pic.php?id=81851
  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
  User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.21 (KHTML, like Gecko)     Qt/4.8.4 Safari/537.21
Reply: 200/OK - http://www.testsite.com/show_pic.php?id=81851
  Date: Tue, 11 Mar 2014 01:16:35 GMT
  Server: Apache
  Set-Cookie: PHPSESSID=abvcv4j6hbu57a638tc8pg8i77b19bl0; path=/
  Content-Length: 0
  Connection: close
  Content-Type: text/html
Page load finished (39 bytes): http://www.testsite.com/show_pic.php?id=81851 (successful)

2 ответа

Решение

Ответ:

Вызов функции извне того же кода, который входит на тестовый сайт, открывает другой браузер. Код для func_get_pic, скопированный и вставленный в функцию входа в систему, работает нормально. Это обходной путь, пока я не выясню, как передать сеанс входа в систему от одной функции к другой.

Согласно вашему коду, после разбора вашего piclink имеет:

http://www.testsite.com/show_pic.php?id=316600

А сейчас ты делаешь baseurl+piclink что значит:

http://www.testsite.com/http://www.testsite.com/show_pic.php?id=316600

Итак, теперь вы знаете, где ошибка. Измените URL соответствующим образом, и это решит вашу проблему!

Другие вопросы по тегам