Python twill: скачать файл, доступный через скрипт PHP

я использую twill для навигации по сайту, защищенному формой входа.

from twill.commands import *

go('http://www.example.com/login/index.php')
fv("login_form", "identifiant", "login")
fv("login_form", "password", "pass")
formaction("login_form", "http://www.example.com/login/control.php")
submit()
go('http://www.example.com/accueil/index.php')

На этой последней странице я хочу скачать файл Excel, который доступен через div со следующим атрибутом:

onclick="OpenWindowFull('../util/exports/control.php?action=export','export',200,100);"

С twill Я могу получить доступ к URL-адресу скрипта PHP и показать содержимое файла.

go('http://www.example.com/util/exports/control.php?action=export')
show()

Однако возвращается строка, соответствующая необработанному содержимому: таким образом, ее невозможно использовать. Есть ли способ получить непосредственно файл Excel способом, аналогичным urllib.urlretrieve()?

2

Решение

Мне удалось сделать это, отправив банку с печеньем из twill в requests,

Примечание: я не мог использовать requests только из-за сложного контроля при входе в систему (не удалось выяснить правильные заголовки или другие параметры).

import requests
from twill.commands import *

# showing login form with twill
go('http://www.example.com/login/index.php')
showforms()

# posting login form with twill
fv("login_form", "identifiant", "login")
fv("login_form", "password", "pass")
formaction("login_form", "http://www.example.com/login/control.php")
submit()

# getting binary content with requests using twill cookie jar
cookies = requests.utils.dict_from_cookiejar(get_browser()._session.cookies)
url = 'http://www.example.com/util/exports/control.php?action=export'

with open('out.xls', 'wb') as handle:
response = requests.get(url, stream=True, cookies=cookies)

if not response.ok:
raise Exception('Could not get file from ' + url)

for block in response.iter_content(1024):
handle.write(block)
1

Другие решения

Еще один способ использования twill.commands.save_html изменено так, чтобы писать как ‘wb’ вместо ‘w’: Python 2.7 с использованием твилла, сохраняя загруженный файл правильно

0

По вопросам рекламы [email protected]