在 Celery 任务期间,我必须从 AdWords 结算页面下载 csv 文件。而且我不知道我的实现有什么问题,所以需要你的帮助。
登录:
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/')
没关系,我现在在结算页面上。接下来,我解析了令牌和 id 的结果页面,分析了 Chrome 调试器中的请求标头和操作 url,现在我想发出 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。为什么?我该怎么做才能让它发挥作用?
尝试使用请求,但甚至无法通过登录阶段...