Мне нужно загрузить CSV-файл со страницы биллинга AdWords во время выполнения задачи Celery. И я понятия не имею, что не так с моей реализацией, поэтому мне нужна ваша помощь.
Авторизоваться:
browser = mechanize.Browser()
browser.open('https://accounts.google.com/ServiceLogin')
browser.select_form(nr=0)
browser['Email'] = g_email
browser['Passwd'] = g_password
browser.submit()
browser.set_handle_robots(False)
billing_resp = browser.open('https://adwords.google.com/')
Все в порядке, я сейчас на странице биллинга. Затем я проанализировал страницу результатов на предмет токена и идентификаторов, проанализировал заголовки запросов и URL-адрес действия в отладчике Chrome, и теперь я хочу сделать запрос POST и получить свой файл csv. Заголовки ответа (в Chrome):
content-disposition:attachment; filename="myclientcenter.csv.gz"
content-length:307479
content-type:application/x-gzip; charset=UTF-8
С механизировать:
data = {
'__u': effectiveUserId,
'__c': customerId,
'token': token,
}
browser.addheaders = [
('accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'),
('content-type', 'application/x-www-form-urlencoded'),
("accept-encoding", "gzip,deflate,sdch"),
('user-agent', "Mozilla/5.0"),
('referer', "https://adwords.google.com/mcm/Mcm?__u=8183865359&__c=3069937889"),
('origin', "https://adwords.google.com"),
]
browser.set_handle_refresh(True)
browser.set_debug_responses(True)
browser.set_debug_redirects(True)
browser.set_handle_referer(True)
browser.set_debug_http(True)
browser.set_handle_equiv(True)
browser.set_handle_gzip(True)
response = browser.open(
'https://adwords.google.com/mcm/file/ClientSummary/',
data='&'.join(['='.join(pair) for pair in data.items()]),
)
НО! Заголовок Content-Length равен 0, и в этом ответе нет Content-Disposition. Почему? И что мне сделать, чтобы он заработал?
Пытался использовать запросы, но не смог даже пройти этап входа в систему ...