Python请求ASP.net始终重定向到登录

时间:2018-12-04 16:24:49

标签: python asp.net python-3.x python-requests

使用Python 3,我尝试使用Python请求从https ASP.Net表单页面下载文件(xlsx)。我正在创建一个会话,并首先尝试登录该站点。它是HTTPS,但是我没有访问SSL证书的权限,因此我正在使用Verify = False,为此我很满意。

我已经手动设置了User-Agent标头with help from here, 与IE F12功能下的网络流量捕获中的浏览器相同,因为此页面似乎需要浏览器用户代理,因为python请求用户代理可能被禁止。

我还从响应文本as advised in this answer中捕获__VIEWSTATE和__VIEWSTATEGENERATOR,并将其与用户名和密码一起添加到我的POST数据中。

login_payload = {'ctl00_txtEmailAddr':my_login, 'ctl00_txtPwd': pwd}
headers = {'User-Agent': user_agent,
       'Accept':r'*/*',
       'Accept-Encoding':r'gzip, deflate',
       'Connection': r'Keep-Alive'}

s = requests.Session()
req = requests.Request('GET', my_url, headers=headers)
prep0 = s.prepare_request(req)
s.headers.update(headers)
resp = s.send(
            prep0,
            verify=False,
            allow_redirects=True,
         )

soup = bs4.BeautifulSoup(resp.text)
login_payload["__VIEWSTATE"] = soup.select_one("#__VIEWSTATE")["value"]
login_payload["__VIEWSTATEGENERATOR"] = 
soup.select_one("#__VIEWSTATEGENERATOR")["value"]

req_login = requests.Request('POST', juvo_url, headers=s.headers, 
data=login_payload)
prep1 = s.prepare_request(req_login)
login_resp = s.send(prep1, verify=False)

如果有帮助,这里是请求正文的其余部分,我没有使用。

__EVENTTARGET=&__EVENTARGUMENT=&forErrorMsg=&ctl00%24txtEmailAddr=*MYLOGIN*&ctl00%24txtPwd=*MYPASSWORD*&ctl00%24ImgBtnLoging.x=0&ctl00%24ImgBtnLoging.y=0

在进行其他尝试并添加了更多代码之后,每个页面(包括尝试从IE复制的直接超链接中获取文件)都会返回“对象移至此处”(带有指向我需要的文件的直接链接,该链接可以正常工作)在浏览器中)或将我重定向到登录页面。
如果尝试下载此文件,请在Python中使用来自request.history的直接链接下载该文件的html文件,具体取决于响应“对象已移至此处”还是登录页面的html。

从启用urllib3调试可以看出,我的请求状态始终为302或200,但是除了登录名/对象移动到此处之外,我还没有看到任何其他响应。

在Python中将复制的浏览器URL修改为我感兴趣的日期后,执行GET请求后,我能得到的最接近的标题是: (如果我没有登录就可以知道这点,那么它实际上可能是一个网站漏洞...)

{'Cache-Control': 'private', 'Content-Length': '873', 'Content-Type': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8', 'Location': 'redacted login page with a whole load of params', 'Server': 'Microsoft-IIS/7.5', 'content-disposition': 'attachment;filename='redacted filename', 'X-AspNet-Version': '2.0.50727', 'X-Powered-By': 'ASP.NET'}

几乎所有 SO 超链接现在都变为紫色,任何线索/建议将不胜感激。
非常感谢。

0 个答案:

没有答案