在一个政府站点上,我设法通过凭据(在login_data
中指定为python字典)登录,如下所示:
with requests.Session() as s:
url = 'https:......../login'
r = s.get(url, data=login_data, headers=headers, verify=False)
r = s.post(url, data=login_data, headers = headers, verify=False)
print(r.content)
显示html:
b'<!DOCTYPE html.....
,如果我搜索我的用户名,则会发现<span class="rich-messages-label msg-def-inf-label">Welcome, USER..XYZ!<
,从中我可以成功登录。
下一步,我要进入我现在登录的站点的搜索子站点(url = 'https:......./search
)。此子站点使我可以在给定日期(incident-ID
,start_date
)上搜索政府记录以查找事件(end_date
)。
由于登录成功,我尝试了以下操作:
with requests.Session() as s:
url = 'https:......../search'
r = s.get(url, data=search_data, headers=headers, verify=False)
r = s.post(url, data=search_data, headers = headers, verify=False)
print(r.content)
我预先使用 Google Chrome Inspecor 为 Network 和 Header 定义了search_data:
search_data:{
'AJAXREQUEST': '_viewRoot',
'theSearchForm': 'theSearchForm',
'incident-ID' : '12345',
'start_date' : '05/03/2019 00:00:00 +01:00',
'end_date' : '05/03/2019 23:59:59 +01:00',
}
并且我指定了标头,以包括不仅仅是代理:
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'en-GB,en-US;q=0.9,en;q=0.8',
'Connection': 'keep-alive',
'Cookie': 'JSESSIONID=8351xxxxxxxxxxxxFD5; _ga=GA1.2.xxxxxxx.xxxxxxxx',
'Host': 'somehost...xyz.eu',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
}
到目前为止,设置应该不错,不是吗?但是我遇到了一个问题,因为print(r.content)
并没有像登录后那样给我.html,而是一些令人失望的简短内容:b'<?xml version="1.0" encoding="UTF-8"?>\n<html xmlns="http://www.w3.org/1999/xhtml"><head><meta name="Ajax-Response" content="redirect" /><meta name="Location" content="home.seam?cid=3774801" /></head></html>
这很可惜,因为我可以在inspctor中看到浏览器中对后请求的响应会产生我正在寻找的确切数据。类似地,第一个请求后产生的数据与我的python命令r = s.post(url, data=login_data, headers = headers, verify=False)
完全相同。但是已经说过的print(r.content)
似乎是重定向,只能将我带回到登录站点,说明您已经登录。
总结:
request.Session.get
和-.post
有效(我得到的响应HTML与Google Chrome Inspector中的相同)。 request.Session.post
不起作用,因为它会产生一些奇怪的重定向(但是我得到了
在Google Chrome浏览器检查器中正确的响应)。我想念什么???请帮忙! :S